Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
e0f5cb89
Commit
e0f5cb89
authored
Sep 20, 2004
by
Richard Russon
Browse files
Options
Browse Files
Download
Plain Diff
Merge flatcap.org:/home/flatcap/backup/bk/ntfs-2.6
into flatcap.org:/home/flatcap/backup/bk/ntfs-2.6-devel
parents
e7f10a52
73e62ce4
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
31 additions
and
21 deletions
+31
-21
fs/ntfs/ChangeLog
fs/ntfs/ChangeLog
+8
-0
fs/ntfs/Makefile
fs/ntfs/Makefile
+1
-1
fs/ntfs/debug.c
fs/ntfs/debug.c
+1
-1
fs/ntfs/inode.c
fs/ntfs/inode.c
+2
-6
fs/ntfs/mft.c
fs/ntfs/mft.c
+2
-1
fs/ntfs/super.c
fs/ntfs/super.c
+17
-9
fs/ntfs/volume.h
fs/ntfs/volume.h
+0
-3
No files found.
fs/ntfs/ChangeLog
View file @
e0f5cb89
...
@@ -21,6 +21,14 @@ ToDo/Notes:
...
@@ -21,6 +21,14 @@ ToDo/Notes:
- Enable the code for setting the NT4 compatibility flag when we start
- Enable the code for setting the NT4 compatibility flag when we start
making NTFS 1.2 specific modifications.
making NTFS 1.2 specific modifications.
2.1.18-WIP
- Remove vol->nr_mft_records as it was pretty meaningless and optimize
the calculation of total/free inodes as used by statfs().
- Fix scheduling latencies in ntfs_fill_super() by dropping the BKL
because the code itself is using the ntfs_lock semaphore which
provides safe locking. (Ingo Molnar)
2.1.17 - Fix bugs in mount time error code paths and other updates.
2.1.17 - Fix bugs in mount time error code paths and other updates.
- Implement bitmap modification code (fs/ntfs/bitmap.[hc]). This
- Implement bitmap modification code (fs/ntfs/bitmap.[hc]). This
...
...
fs/ntfs/Makefile
View file @
e0f5cb89
...
@@ -6,7 +6,7 @@ ntfs-objs := aops.o attrib.o collate.o compress.o debug.o dir.o file.o \
...
@@ -6,7 +6,7 @@ ntfs-objs := aops.o attrib.o collate.o compress.o debug.o dir.o file.o \
index.o inode.o mft.o mst.o namei.o super.o sysctl.o unistr.o
\
index.o inode.o mft.o mst.o namei.o super.o sysctl.o unistr.o
\
upcase.o
upcase.o
EXTRA_CFLAGS
=
-DNTFS_VERSION
=
\"
2.1.1
7
\"
EXTRA_CFLAGS
=
-DNTFS_VERSION
=
\"
2.1.1
8-WIP
\"
ifeq
($(CONFIG_NTFS_DEBUG),y)
ifeq
($(CONFIG_NTFS_DEBUG),y)
EXTRA_CFLAGS
+=
-DDEBUG
EXTRA_CFLAGS
+=
-DDEBUG
...
...
fs/ntfs/debug.c
View file @
e0f5cb89
...
@@ -127,7 +127,7 @@ void __ntfs_debug (const char *file, int line, const char *function,
...
@@ -127,7 +127,7 @@ void __ntfs_debug (const char *file, int line, const char *function,
va_start
(
args
,
fmt
);
va_start
(
args
,
fmt
);
vsnprintf
(
err_buf
,
sizeof
(
err_buf
),
fmt
,
args
);
vsnprintf
(
err_buf
,
sizeof
(
err_buf
),
fmt
,
args
);
va_end
(
args
);
va_end
(
args
);
printk
(
KERN_DEBUG
"NTFS-fs DEBUG (%s, %d): %s: %s
\n
"
,
printk
(
KERN_DEBUG
"NTFS-fs DEBUG (%s, %d): %s
()
: %s
\n
"
,
file
,
line
,
flen
?
function
:
""
,
err_buf
);
file
,
line
,
flen
?
function
:
""
,
err_buf
);
spin_unlock
(
&
err_buf_lock
);
spin_unlock
(
&
err_buf_lock
);
}
}
...
...
fs/ntfs/inode.c
View file @
e0f5cb89
...
@@ -1900,8 +1900,6 @@ int ntfs_read_inode_mount(struct inode *vi)
...
@@ -1900,8 +1900,6 @@ int ntfs_read_inode_mount(struct inode *vi)
/* Are we in the first extent? */
/* Are we in the first extent? */
if
(
!
next_vcn
)
{
if
(
!
next_vcn
)
{
u64
ll
;
if
(
attr
->
data
.
non_resident
.
lowest_vcn
)
{
if
(
attr
->
data
.
non_resident
.
lowest_vcn
)
{
ntfs_error
(
sb
,
"First extent of $DATA "
ntfs_error
(
sb
,
"First extent of $DATA "
"attribute has non zero "
"attribute has non zero "
...
@@ -1920,17 +1918,15 @@ int ntfs_read_inode_mount(struct inode *vi)
...
@@ -1920,17 +1918,15 @@ int ntfs_read_inode_mount(struct inode *vi)
non_resident
.
initialized_size
);
non_resident
.
initialized_size
);
ni
->
allocated_size
=
sle64_to_cpu
(
ni
->
allocated_size
=
sle64_to_cpu
(
attr
->
data
.
non_resident
.
allocated_size
);
attr
->
data
.
non_resident
.
allocated_size
);
/* Set the number of mft records. */
ll
=
vi
->
i_size
>>
vol
->
mft_record_size_bits
;
/*
/*
* Verify the number of mft records does not exceed
* Verify the number of mft records does not exceed
* 2^32 - 1.
* 2^32 - 1.
*/
*/
if
(
ll
>=
(
1ULL
<<
32
))
{
if
((
vi
->
i_size
>>
vol
->
mft_record_size_bits
)
>=
(
1ULL
<<
32
))
{
ntfs_error
(
sb
,
"$MFT is too big! Aborting."
);
ntfs_error
(
sb
,
"$MFT is too big! Aborting."
);
goto
put_err_out
;
goto
put_err_out
;
}
}
vol
->
nr_mft_records
=
ll
;
/*
/*
* We have got the first extent of the runlist for
* We have got the first extent of the runlist for
* $MFT which means it is now relatively safe to call
* $MFT which means it is now relatively safe to call
...
...
fs/ntfs/mft.c
View file @
e0f5cb89
...
@@ -418,7 +418,8 @@ MFT_RECORD *map_extent_mft_record(ntfs_inode *base_ni, MFT_REF mref,
...
@@ -418,7 +418,8 @@ MFT_RECORD *map_extent_mft_record(ntfs_inode *base_ni, MFT_REF mref,
m
=
ERR_PTR
(
-
ENOMEM
);
m
=
ERR_PTR
(
-
ENOMEM
);
goto
unm_err_out
;
goto
unm_err_out
;
}
}
if
(
base_ni
->
ext
.
extent_ntfs_inos
)
{
if
(
base_ni
->
nr_extents
)
{
BUG_ON
(
!
base_ni
->
ext
.
extent_ntfs_inos
);
memcpy
(
tmp
,
base_ni
->
ext
.
extent_ntfs_inos
,
new_size
-
memcpy
(
tmp
,
base_ni
->
ext
.
extent_ntfs_inos
,
new_size
-
4
*
sizeof
(
ntfs_inode
*
));
4
*
sizeof
(
ntfs_inode
*
));
kfree
(
base_ni
->
ext
.
extent_ntfs_inos
);
kfree
(
base_ni
->
ext
.
extent_ntfs_inos
);
...
...
fs/ntfs/super.c
View file @
e0f5cb89
...
@@ -29,6 +29,7 @@
...
@@ -29,6 +29,7 @@
#include <linux/buffer_head.h>
#include <linux/buffer_head.h>
#include <linux/vfs.h>
#include <linux/vfs.h>
#include <linux/moduleparam.h>
#include <linux/moduleparam.h>
#include <linux/smp_lock.h>
#include "ntfs.h"
#include "ntfs.h"
#include "sysctl.h"
#include "sysctl.h"
...
@@ -2013,7 +2014,7 @@ static s64 get_nr_free_clusters(ntfs_volume *vol)
...
@@ -2013,7 +2014,7 @@ static s64 get_nr_free_clusters(ntfs_volume *vol)
*/
*/
static
unsigned
long
__get_nr_free_mft_records
(
ntfs_volume
*
vol
)
static
unsigned
long
__get_nr_free_mft_records
(
ntfs_volume
*
vol
)
{
{
s64
nr_free
=
vol
->
nr_mft_records
;
s64
nr_free
;
u32
*
kaddr
;
u32
*
kaddr
;
struct
address_space
*
mapping
=
vol
->
mftbmp_ino
->
i_mapping
;
struct
address_space
*
mapping
=
vol
->
mftbmp_ino
->
i_mapping
;
filler_t
*
readpage
=
(
filler_t
*
)
mapping
->
a_ops
->
readpage
;
filler_t
*
readpage
=
(
filler_t
*
)
mapping
->
a_ops
->
readpage
;
...
@@ -2022,13 +2023,16 @@ static unsigned long __get_nr_free_mft_records(ntfs_volume *vol)
...
@@ -2022,13 +2023,16 @@ static unsigned long __get_nr_free_mft_records(ntfs_volume *vol)
unsigned
int
max_size
;
unsigned
int
max_size
;
ntfs_debug
(
"Entering."
);
ntfs_debug
(
"Entering."
);
/* Number of mft records in file system (at this point in time). */
nr_free
=
vol
->
mft_ino
->
i_size
>>
vol
->
mft_record_size_bits
;
/*
/*
* Convert the
number of bits into bytes rounded up, then convert into
* Convert the
maximum number of set bits into bytes rounded up, then
*
multiples of PAGE_CACHE_SIZE, rounding up so that if we have on
e
*
convert into multiples of PAGE_CACHE_SIZE, rounding up so that if w
e
* full and one partial page max_index = 2.
*
have one
full and one partial page max_index = 2.
*/
*/
max_index
=
(((
vol
->
nr_mft_records
+
7
)
>>
3
)
+
PAGE_CACHE_SIZE
-
1
)
>>
max_index
=
((((
NTFS_I
(
vol
->
mft_ino
)
->
initialized_size
>>
PAGE_CACHE_SHIFT
;
vol
->
mft_record_size_bits
)
+
7
)
>>
3
)
+
PAGE_CACHE_SIZE
-
1
)
>>
PAGE_CACHE_SHIFT
;
/* Use multiples of 4 bytes. */
/* Use multiples of 4 bytes. */
max_size
=
PAGE_CACHE_SIZE
>>
2
;
max_size
=
PAGE_CACHE_SIZE
>>
2
;
ntfs_debug
(
"Reading $MFT/$BITMAP, max_index = 0x%lx, max_size = "
ntfs_debug
(
"Reading $MFT/$BITMAP, max_index = 0x%lx, max_size = "
...
@@ -2123,9 +2127,9 @@ static int ntfs_statfs(struct super_block *sb, struct kstatfs *sfs)
...
@@ -2123,9 +2127,9 @@ static int ntfs_statfs(struct super_block *sb, struct kstatfs *sfs)
sfs
->
f_bavail
=
sfs
->
f_bfree
=
size
;
sfs
->
f_bavail
=
sfs
->
f_bfree
=
size
;
/* Serialize accesses to the inode bitmap. */
/* Serialize accesses to the inode bitmap. */
down_read
(
&
vol
->
mftbmp_lock
);
down_read
(
&
vol
->
mftbmp_lock
);
/*
Total file nodes in file system (at this mome
nt in time). */
/*
Number of inodes in file system (at this poi
nt in time). */
sfs
->
f_files
=
vol
->
mft_ino
->
i_size
>>
vol
->
mft_record_size_bits
;
sfs
->
f_files
=
vol
->
mft_ino
->
i_size
>>
vol
->
mft_record_size_bits
;
/* Free
file
nodes in fs (based on current total count). */
/* Free
i
nodes in fs (based on current total count). */
sfs
->
f_ffree
=
__get_nr_free_mft_records
(
vol
);
sfs
->
f_ffree
=
__get_nr_free_mft_records
(
vol
);
up_read
(
&
vol
->
mftbmp_lock
);
up_read
(
&
vol
->
mftbmp_lock
);
/*
/*
...
@@ -2288,6 +2292,8 @@ static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
...
@@ -2288,6 +2292,8 @@ static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
vol
->
fmask
=
0177
;
vol
->
fmask
=
0177
;
vol
->
dmask
=
0077
;
vol
->
dmask
=
0077
;
unlock_kernel
();
/* Important to get the mount options dealt with now. */
/* Important to get the mount options dealt with now. */
if
(
!
parse_options
(
vol
,
(
char
*
)
opt
))
if
(
!
parse_options
(
vol
,
(
char
*
)
opt
))
goto
err_out_now
;
goto
err_out_now
;
...
@@ -2424,6 +2430,7 @@ static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
...
@@ -2424,6 +2430,7 @@ static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
}
}
up
(
&
ntfs_lock
);
up
(
&
ntfs_lock
);
sb
->
s_export_op
=
&
ntfs_export_ops
;
sb
->
s_export_op
=
&
ntfs_export_ops
;
lock_kernel
();
return
0
;
return
0
;
}
}
ntfs_error
(
sb
,
"Failed to allocate root directory."
);
ntfs_error
(
sb
,
"Failed to allocate root directory."
);
...
@@ -2527,6 +2534,7 @@ static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
...
@@ -2527,6 +2534,7 @@ static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
}
}
/* Errors at this stage are irrelevant. */
/* Errors at this stage are irrelevant. */
err_out_now:
err_out_now:
lock_kernel
();
sb
->
s_fs_info
=
NULL
;
sb
->
s_fs_info
=
NULL
;
kfree
(
vol
);
kfree
(
vol
);
ntfs_debug
(
"Failed, returning -EINVAL."
);
ntfs_debug
(
"Failed, returning -EINVAL."
);
...
...
fs/ntfs/volume.h
View file @
e0f5cb89
...
@@ -95,9 +95,6 @@ typedef struct {
...
@@ -95,9 +95,6 @@ typedef struct {
struct
inode
*
mftbmp_ino
;
/* Attribute inode for $MFT/$BITMAP. */
struct
inode
*
mftbmp_ino
;
/* Attribute inode for $MFT/$BITMAP. */
struct
rw_semaphore
mftbmp_lock
;
/* Lock for serializing accesses to the
struct
rw_semaphore
mftbmp_lock
;
/* Lock for serializing accesses to the
mft record bitmap ($MFT/$BITMAP). */
mft record bitmap ($MFT/$BITMAP). */
unsigned
long
nr_mft_records
;
/* Number of mft records == number of
bits in mft bitmap. */
#ifdef NTFS_RW
#ifdef NTFS_RW
struct
inode
*
mftmirr_ino
;
/* The VFS inode of $MFTMirr. */
struct
inode
*
mftmirr_ino
;
/* The VFS inode of $MFTMirr. */
int
mftmirr_size
;
/* Size of mft mirror in mft records. */
int
mftmirr_size
;
/* Size of mft mirror in mft records. */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment