From 400f7bcb061b47c28289639a4630607db54dd422 Mon Sep 17 00:00:00 2001 From: Anton Altaparmakov Date: Fri, 15 Oct 2004 12:43:34 +0100 Subject: [PATCH] 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: Anton Altaparmakov --- fs/ntfs/ChangeLog | 4 ++++ fs/ntfs/aops.c | 24 +++++++++++++----------- fs/ntfs/aops.h | 3 +-- fs/ntfs/index.h | 4 ++-- fs/ntfs/inode.c | 4 ++-- fs/ntfs/mft.c | 3 +-- 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog index a1c774578090c..52670b89d938d 100644 --- a/fs/ntfs/ChangeLog +++ b/fs/ntfs/ChangeLog @@ -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. diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c index ede1c42b8cbff..bc1d88dd6e510 100644 --- a/fs/ntfs/aops.c +++ b/fs/ntfs/aops.c @@ -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)) - set_buffer_dirty(bh); - bh_start = bh_end; + bh_ofs = bh_offset(bh); + if (bh_ofs + bh_size <= ofs) + continue; + if (unlikely(bh_ofs >= end)) + break; + set_buffer_dirty(bh); } while ((bh = bh->b_this_page) != head); __set_page_dirty_nobuffers(page); } diff --git a/fs/ntfs/aops.h b/fs/ntfs/aops.h index 2bdadc1d533b4..10b23174cb5f4 100644 --- a/fs/ntfs/aops.h +++ b/fs/ntfs/aops.h @@ -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 */ diff --git a/fs/ntfs/index.h b/fs/ntfs/index.h index b8f503fa2d6e6..846a489e8692b 100644 --- a/fs/ntfs/index.h +++ b/fs/ntfs/index.h @@ -139,8 +139,8 @@ 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, - (u8*)ictx->ia - (u8*)page_address(ictx->page)); + mark_ntfs_record_dirty(ictx->page, + (u8*)ictx->ia - (u8*)page_address(ictx->page)); } #endif /* NTFS_RW */ diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c index 3f1a444384474..f15141fbbfe6c 100644 --- a/fs/ntfs/inode.c +++ b/fs/ntfs/inode.c @@ -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)) diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c index 757effcd70663..68cb2678cd504 100644 --- a/fs/ntfs/mft.c +++ b/fs/ntfs/mft.c @@ -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)) -- 2.53.0