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
3034a968
Commit
3034a968
authored
Oct 12, 2004
by
Anton Altaparmakov
Browse files
Options
Browse Files
Download
Plain Diff
Merge
ssh://linux-ntfs@bkbits.net/ntfs-2.6-devel
into cantab.net:/home/src/ntfs-2.6-devel
parents
35370417
efd012db
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
14 deletions
+21
-14
fs/ntfs/ChangeLog
fs/ntfs/ChangeLog
+9
-0
fs/ntfs/aops.c
fs/ntfs/aops.c
+3
-3
fs/ntfs/mft.c
fs/ntfs/mft.c
+9
-11
No files found.
fs/ntfs/ChangeLog
View file @
3034a968
...
...
@@ -76,6 +76,15 @@ ToDo/Notes:
- Modify fs/ntfs/mft.c::write_mft_record_nolock() so that it only
writes the mft record if the buffers belonging to it are dirty.
Otherwise we assume that it was written out by other means already.
- Attempting to write outside initialized size is _not_ a bug so remove
the bug check from fs/ntfs/aops.c::ntfs_write_mst_block(). It is in
fact required to write outside initialized size when preparing to
extend the initialized size.
- Map the page instead of using page_address() before writing to it in
fs/ntfs/aops.c::ntfs_mft_writepage().
- Provide exclusion between opening an inode / mapping an mft record
and accessing the mft record in fs/ntfs/mft.c::ntfs_mft_writepage()
by setting the page not uptodate throughout ntfs_mft_writepage().
2.1.20 - Fix two stupid bugs introduced in 2.1.18 release.
...
...
fs/ntfs/aops.c
View file @
3034a968
...
...
@@ -892,8 +892,6 @@ static int ntfs_write_mst_block(struct writeback_control *wbc,
}
BUG_ON
(
!
rec_is_dirty
);
}
/* Attempting to write outside the initialized size is a bug. */
BUG_ON
(((
block
+
1
)
<<
bh_size_bits
)
>
ni
->
initialized_size
);
if
(
!
buffer_mapped
(
bh
))
{
ntfs_error
(
vol
->
sb
,
"Writing ntfs records without "
"existing mapped buffers is not "
...
...
@@ -919,7 +917,7 @@ static int ntfs_write_mst_block(struct writeback_control *wbc,
if
(
!
nr_bhs
)
goto
done
;
/* Apply the mst protection fixups. */
kaddr
=
page_address
(
page
);
kaddr
=
kmap
(
page
);
for
(
i
=
0
;
i
<
nr_bhs
;
i
++
)
{
if
(
!
(
i
%
bhs_per_rec
))
{
err
=
pre_write_mst_fixup
((
NTFS_RECORD
*
)(
kaddr
+
...
...
@@ -976,6 +974,7 @@ static int ntfs_write_mst_block(struct writeback_control *wbc,
bh_offset
(
bhs
[
i
])));
}
flush_dcache_page
(
page
);
kunmap
(
page
);
if
(
unlikely
(
err
))
{
/* I/O error during writing. This is really bad! */
ntfs_error
(
vol
->
sb
,
"I/O error while writing ntfs record "
...
...
@@ -998,6 +997,7 @@ static int ntfs_write_mst_block(struct writeback_control *wbc,
post_write_mst_fixup
((
NTFS_RECORD
*
)(
kaddr
+
bh_offset
(
bhs
[
i
])));
}
kunmap
(
page
);
cleanup_out:
/* Clean the buffers. */
for
(
i
=
0
;
i
<
nr_bhs
;
i
++
)
...
...
fs/ntfs/mft.c
View file @
3034a968
...
...
@@ -724,18 +724,9 @@ int write_mft_record_nolock(ntfs_inode *ni, MFT_RECORD *m, int sync)
*/
if
(
!
NInoTestClearDirty
(
ni
))
goto
done
;
/* Make sure we have mapped buffers. */
if
(
!
page_has_buffers
(
page
))
{
no_buffers_err_out:
ntfs_error
(
vol
->
sb
,
"Writing mft records without existing "
"buffers is not implemented yet. %s"
,
ntfs_please_email
);
err
=
-
EOPNOTSUPP
;
goto
err_out
;
}
BUG_ON
(
!
page_has_buffers
(
page
));
bh
=
head
=
page_buffers
(
page
);
if
(
!
bh
)
goto
no_buffers_err_out
;
BUG_ON
(
!
bh
);
nr_bhs
=
0
;
block_start
=
0
;
m_start
=
ni
->
page_ofs
;
...
...
@@ -892,6 +883,12 @@ static int ntfs_mft_writepage(struct page *page, struct writeback_control *wbc)
ntfs_debug
(
"Entering for %i inodes starting at 0x%lx."
,
nr
,
mft_no
);
/* Iterate over the mft records in the page looking for a dirty one. */
maddr
=
(
u8
*
)
kmap
(
page
);
/*
* Clear the page uptodate flag. This will cause anyone trying to get
* hold of the page to block on the page lock in read_cache_page().
*/
BUG_ON
(
!
PageUptodate
(
page
));
ClearPageUptodate
(
page
);
for
(
i
=
0
;
i
<
nr
;
++
i
,
++
mft_no
,
maddr
+=
vol
->
mft_record_size
)
{
struct
inode
*
vi
;
ntfs_inode
*
ni
,
*
eni
;
...
...
@@ -1034,6 +1031,7 @@ static int ntfs_mft_writepage(struct page *page, struct writeback_control *wbc)
up
(
&
ni
->
extent_lock
);
iput
(
vi
);
}
SetPageUptodate
(
page
);
kunmap
(
page
);
/* If a dirty mft record was found, redirty the page. */
if
(
is_dirty
)
{
...
...
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