Commit 400f7bcb authored by Anton Altaparmakov's avatar Anton Altaparmakov

NTFS: Modify fs/ntfs/aops.c::mark_ntfs_record_dirty() to no longer take the

      ntfs inode as a parameter as this is confusing and misleading and the
      ntfs inode is available via NTFS_I(page->mapping->host).
      Adapt all callers to this change.
Signed-off-by: default avatarAnton Altaparmakov <aia21@cantab.net>
parent 8f62c402
......@@ -118,6 +118,10 @@ ToDo/Notes:
inode semaphore around the code thst sets ni->itype.index.bmp_ino to
NULL and reorganize the code to optimize it a bit. (Thanks to
Christoph Hellwig for spotting this.)
- Modify fs/ntfs/aops.c::mark_ntfs_record_dirty() to no longer take the
ntfs inode as a parameter as this is confusing and misleading and the
needed ntfs inode is available via NTFS_I(page->mapping->host).
Adapt all callers to this change.
2.1.20 - Fix two stupid bugs introduced in 2.1.18 release.
......
......@@ -2132,9 +2132,8 @@ struct address_space_operations ntfs_mst_aops = {
/**
* mark_ntfs_record_dirty - mark an ntfs record dirty
* @ni: ntfs inode containing the ntfs record to be marked dirty
* @page: page containing the ntfs record to mark dirty
* @rec_start: byte offset within @page at which the ntfs record begins
* @ofs: byte offset within @page at which the ntfs record begins
*
* If the ntfs record is the same size as the page cache page @page, set all
* buffers in the page dirty. Otherwise, set only the buffers in which the
......@@ -2143,26 +2142,29 @@ struct address_space_operations ntfs_mst_aops = {
* Also, set the page containing the ntfs record dirty, which also marks the
* vfs inode the ntfs record belongs to dirty (I_DIRTY_PAGES).
*/
void mark_ntfs_record_dirty(ntfs_inode *ni, struct page *page,
unsigned int rec_start) {
void mark_ntfs_record_dirty(struct page *page, const unsigned int ofs) {
ntfs_inode *ni;
struct buffer_head *bh, *head;
unsigned int rec_end, bh_size, bh_start, bh_end;
unsigned int end, bh_size, bh_ofs;
BUG_ON(!page);
BUG_ON(!page_has_buffers(page));
ni = NTFS_I(page->mapping->host);
BUG_ON(!ni);
if (ni->itype.index.block_size == PAGE_CACHE_SIZE) {
__set_page_dirty_buffers(page);
return;
}
rec_end = rec_start + ni->itype.index.block_size;
end = ofs + ni->itype.index.block_size;
bh_size = ni->vol->sb->s_blocksize;
bh_start = 0;
bh = head = page_buffers(page);
do {
bh_end = bh_start + bh_size;
if ((bh_start >= rec_start) && (bh_end <= rec_end))
bh_ofs = bh_offset(bh);
if (bh_ofs + bh_size <= ofs)
continue;
if (unlikely(bh_ofs >= end))
break;
set_buffer_dirty(bh);
bh_start = bh_end;
} while ((bh = bh->b_this_page) != head);
__set_page_dirty_nobuffers(page);
}
......
......@@ -95,8 +95,7 @@ static inline struct page *ntfs_map_page(struct address_space *mapping,
#ifdef NTFS_RW
extern void mark_ntfs_record_dirty(ntfs_inode *ni, struct page *page,
unsigned int rec_start);
extern void mark_ntfs_record_dirty(struct page *page, const unsigned int ofs);
#endif /* NTFS_RW */
......
......@@ -139,7 +139,7 @@ static inline void ntfs_index_entry_mark_dirty(ntfs_index_context *ictx)
if (ictx->is_in_root)
mark_mft_record_dirty(ictx->actx->ntfs_ino);
else
mark_ntfs_record_dirty(ictx->idx_ni, ictx->page,
mark_ntfs_record_dirty(ictx->page,
(u8*)ictx->ia - (u8*)page_address(ictx->page));
}
......
......@@ -2513,8 +2513,8 @@ int ntfs_write_inode(struct inode *vi, int sync)
* this function returns.
*/
if (modified && !NInoTestSetDirty(ctx->ntfs_ino))
mark_ntfs_record_dirty(NTFS_I(ni->vol->mft_ino),
ctx->ntfs_ino->page, ctx->ntfs_ino->page_ofs);
mark_ntfs_record_dirty(ctx->ntfs_ino->page,
ctx->ntfs_ino->page_ofs);
ntfs_attr_put_search_ctx(ctx);
/* Now the access times are updated, write the base mft record. */
if (NInoDirty(ni))
......
......@@ -380,8 +380,7 @@ void __mark_mft_record_dirty(ntfs_inode *ni)
ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
BUG_ON(NInoAttr(ni));
mark_ntfs_record_dirty(NTFS_I(ni->vol->mft_ino), ni->page,
ni->page_ofs);
mark_ntfs_record_dirty(ni->page, ni->page_ofs);
/* Determine the base vfs inode and mark it dirty, too. */
down(&ni->extent_lock);
if (likely(ni->nr_extents >= 0))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment