diff options
author | Jérôme Glisse <jglisse@redhat.com> | 2018-03-29 16:08:10 -0400 |
---|---|---|
committer | Jérôme Glisse <jglisse@redhat.com> | 2018-04-04 14:37:08 -0400 |
commit | 2b9cab0f3462d4f88b8a1eb0029d4dd2f60568ea (patch) | |
tree | f54d4394fd44154dcd0fa1efb57bd0f6636c1b33 | |
parent | b0c42be87e64f49d1f9af00ccd0096681fc190d7 (diff) |
fs/buffer: add struct address_space to create_empty_buffers() args
Add struct address_space to create_empty_buffers() arguments, this will
be needed latter and we do not want to rely on struct page.mapping.
---------------------------------------------------------------------
identifier M;
expression E1, E2, E3;
@@
struct address_space *M;
...
-create_empty_buffers(E1, E2, E3)
+create_empty_buffers(M, E1, E2, E3)
@exists@
identifier M, F;
expression E1, E2, E3;
@@
F(..., struct address_space *M, ...) {...
-create_empty_buffers(E1, E2, E3)
+create_empty_buffers(M, E1, E2, E3)
...}
@exists@
identifier I;
expression E1, E2, E3;
@@
struct inode *I;
...
-create_empty_buffers(E1, E2, E3)
+create_empty_buffers(I->i_mapping, E1, E2, E3)
@exists@
identifier I, F;
expression E1, E2, E3;
@@
F(..., struct inode *I, ...) {...
-create_empty_buffers(E1, E2, E3)
+create_empty_buffers(I->i_mapping, E1, E2, E3)
...}
@exists@
expression E1, E2, E3;
@@
-create_empty_buffers(E1, E2, E3)
+create_empty_buffers(E1->mapping, E1, E2, E3)
---------------------------------------------------------------------
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
CC: Andrew Morton <akpm@linux-foundation.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Tejun Heo <tj@kernel.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Josef Bacik <jbacik@fb.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
-rw-r--r-- | fs/buffer.c | 7 | ||||
-rw-r--r-- | fs/ext4/inode.c | 4 | ||||
-rw-r--r-- | fs/ext4/move_extent.c | 5 | ||||
-rw-r--r-- | fs/gfs2/aops.c | 5 | ||||
-rw-r--r-- | fs/gfs2/bmap.c | 6 | ||||
-rw-r--r-- | fs/gfs2/meta_io.c | 2 | ||||
-rw-r--r-- | fs/gfs2/quota.c | 2 | ||||
-rw-r--r-- | fs/mpage.c | 3 | ||||
-rw-r--r-- | fs/nilfs2/mdt.c | 2 | ||||
-rw-r--r-- | fs/nilfs2/page.c | 5 | ||||
-rw-r--r-- | fs/nilfs2/segment.c | 3 | ||||
-rw-r--r-- | fs/ntfs/aops.c | 6 | ||||
-rw-r--r-- | fs/ntfs/file.c | 3 | ||||
-rw-r--r-- | fs/ocfs2/aops.c | 2 | ||||
-rw-r--r-- | fs/reiserfs/inode.c | 2 | ||||
-rw-r--r-- | fs/ufs/util.c | 2 | ||||
-rw-r--r-- | include/linux/buffer_head.h | 4 |
17 files changed, 35 insertions, 28 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 37f4275f0693..8015ad5683ce 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -1529,7 +1529,7 @@ EXPORT_SYMBOL(block_invalidatepage); * __set_page_dirty_buffers() via private_lock. try_to_free_buffers * is already excluded via the page lock. */ -void create_empty_buffers(struct page *page, +void create_empty_buffers(struct address_space *mapping, struct page *page, unsigned long blocksize, unsigned long b_state) { struct buffer_head *bh, *head, *tail; @@ -1651,7 +1651,8 @@ static struct buffer_head *create_page_buffers(struct page *page, struct inode * BUG_ON(!PageLocked(page)); if (!page_has_buffers(page)) - create_empty_buffers(page, 1 << READ_ONCE(inode->i_blkbits), + create_empty_buffers(inode->i_mapping, page, + 1 << READ_ONCE(inode->i_blkbits), b_state); return page_buffers(page); } @@ -2890,7 +2891,7 @@ int block_truncate_page(struct address_space *mapping, goto out; if (!page_has_buffers(page)) - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(mapping, page, blocksize, 0); /* Find the buffer that contains "offset" */ bh = page_buffers(page); diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index a2f08ce72e95..5e9634d91444 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1173,7 +1173,7 @@ static int ext4_block_write_begin(struct page *page, loff_t pos, unsigned len, BUG_ON(from > to); if (!page_has_buffers(page)) - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(inode->i_mapping, page, blocksize, 0); head = page_buffers(page); bbits = ilog2(blocksize); block = (sector_t)page->index << (PAGE_SHIFT - bbits); @@ -4001,7 +4001,7 @@ static int __ext4_block_zero_page_range(handle_t *handle, iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits); if (!page_has_buffers(page)) - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(mapping, page, blocksize, 0); /* Find the buffer that contains "offset" */ bh = page_buffers(page); diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c index f8e5623a1449..62b7a6676bed 100644 --- a/fs/ext4/move_extent.c +++ b/fs/ext4/move_extent.c @@ -183,7 +183,7 @@ mext_page_mkuptodate(struct page *page, unsigned from, unsigned to) blocksize = i_blocksize(inode); if (!page_has_buffers(page)) - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(inode->i_mapping, page, blocksize, 0); head = page_buffers(page); block = (sector_t)page->index << (PAGE_SHIFT - inode->i_blkbits); @@ -377,7 +377,8 @@ data_copy: /* Perform all necessary steps similar write_begin()/write_end() * but keeping in mind that i_size will not change */ if (!page_has_buffers(pagep[0])) - create_empty_buffers(pagep[0], 1 << orig_inode->i_blkbits, 0); + create_empty_buffers(orig_inode->i_mapping, pagep[0], + 1 << orig_inode->i_blkbits, 0); bh = page_buffers(pagep[0]); for (i = 0; i < data_offset_in_page; i++) bh = bh->b_this_page; diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c index 466f2f909108..86ca7e97124a 100644 --- a/fs/gfs2/aops.c +++ b/fs/gfs2/aops.c @@ -192,8 +192,9 @@ static int __gfs2_jdata_writepage(struct page *page, struct writeback_control *w if (PageChecked(page)) { ClearPageChecked(page); if (!page_has_buffers(page)) { - create_empty_buffers(page, inode->i_sb->s_blocksize, - BIT(BH_Dirty)|BIT(BH_Uptodate)); + create_empty_buffers(inode->i_mapping, page, + inode->i_sb->s_blocksize, + BIT(BH_Dirty) | BIT(BH_Uptodate)); } gfs2_page_add_databufs(ip, page, 0, sdp->sd_vfs->s_blocksize); } diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 51f940e76c5e..12e10758b0f2 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c @@ -80,8 +80,8 @@ static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh, } if (!page_has_buffers(page)) - create_empty_buffers(page, BIT(inode->i_blkbits), - BIT(BH_Uptodate)); + create_empty_buffers(inode->i_mapping, page, + BIT(inode->i_blkbits), BIT(BH_Uptodate)); bh = page_buffers(page); @@ -917,7 +917,7 @@ static int gfs2_block_zero_range(struct inode *inode, loff_t from, iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits); if (!page_has_buffers(page)) - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(mapping, page, blocksize, 0); /* Find the buffer that contains "offset" */ bh = page_buffers(page); diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c index e1942636e7e8..0c2cca6f291e 100644 --- a/fs/gfs2/meta_io.c +++ b/fs/gfs2/meta_io.c @@ -143,7 +143,7 @@ struct buffer_head *gfs2_getbuf(struct gfs2_glock *gl, u64 blkno, int create) } if (!page_has_buffers(page)) - create_empty_buffers(page, sdp->sd_sb.sb_bsize, 0); + create_empty_buffers(mapping, page, sdp->sd_sb.sb_bsize, 0); /* Locate header for our buffer within our page */ for (bh = page_buffers(page); bufnum--; bh = bh->b_this_page) diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 7a98abd340ee..0b9b8a89ea30 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -708,7 +708,7 @@ static int gfs2_write_buf_to_page(struct gfs2_inode *ip, unsigned long index, if (!page) return -ENOMEM; if (!page_has_buffers(page)) - create_empty_buffers(page, bsize, 0); + create_empty_buffers(mapping, page, bsize, 0); bh = page_buffers(page); while (!done) { diff --git a/fs/mpage.c b/fs/mpage.c index 624995c333e0..8157891d056f 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -117,7 +117,8 @@ map_buffer_to_page(struct inode *inode, struct page *page, SetPageUptodate(page); return; } - create_empty_buffers(page, i_blocksize(inode), 0); + create_empty_buffers(inode->i_mapping, page, + i_blocksize(inode), 0); } head = page_buffers(page); page_bh = head; diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c index ce6ec3f8faa0..ca7bc0fba624 100644 --- a/fs/nilfs2/mdt.c +++ b/fs/nilfs2/mdt.c @@ -562,7 +562,7 @@ int nilfs_mdt_freeze_buffer(struct inode *inode, struct buffer_head *bh) return -ENOMEM; if (!page_has_buffers(page)) - create_empty_buffers(page, 1 << blkbits, 0); + create_empty_buffers(inode->i_mapping, page, 1 << blkbits, 0); bh_frozen = nilfs_page_get_nth_block(page, bh_offset(bh) >> blkbits); diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c index 68241512d7c1..56db8407e956 100644 --- a/fs/nilfs2/page.c +++ b/fs/nilfs2/page.c @@ -43,7 +43,8 @@ __nilfs_get_page_block(struct page *page, unsigned long block, pgoff_t index, struct buffer_head *bh; if (!page_has_buffers(page)) - create_empty_buffers(page, 1 << blkbits, b_state); + create_empty_buffers(page->mapping, page, 1 << blkbits, + b_state); first_block = (unsigned long)index << (PAGE_SHIFT - blkbits); bh = nilfs_page_get_nth_block(page, block - first_block); @@ -212,7 +213,7 @@ static void nilfs_copy_page(struct page *dst, struct page *src, int copy_dirty) sbh = sbufs = page_buffers(src); if (!page_has_buffers(dst)) - create_empty_buffers(dst, sbh->b_size, 0); + create_empty_buffers(dst->mapping, dst, sbh->b_size, 0); if (copy_dirty) mask |= BIT(BH_Dirty); diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 0953635e7d48..0952d0acab4a 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c @@ -721,7 +721,8 @@ static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode, lock_page(page); if (!page_has_buffers(page)) - create_empty_buffers(page, i_blocksize(inode), 0); + create_empty_buffers(mapping, page, + i_blocksize(inode), 0); unlock_page(page); bh = head = page_buffers(page); diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c index 048c40786dc7..9a77c3d066a8 100644 --- a/fs/ntfs/aops.c +++ b/fs/ntfs/aops.c @@ -212,7 +212,7 @@ static int ntfs_read_block(struct page *page) blocksize_bits = vol->sb->s_blocksize_bits; if (!page_has_buffers(page)) { - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(vi->i_mapping, page, blocksize, 0); if (unlikely(!page_has_buffers(page))) { unlock_page(page); return -ENOMEM; @@ -583,8 +583,8 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) blocksize_bits = vol->sb->s_blocksize_bits; if (!page_has_buffers(page)) { BUG_ON(!PageUptodate(page)); - create_empty_buffers(page, blocksize, - (1 << BH_Uptodate) | (1 << BH_Dirty)); + create_empty_buffers(vi->i_mapping, page, blocksize, + (1 << BH_Uptodate) | (1 << BH_Dirty)); if (unlikely(!page_has_buffers(page))) { ntfs_warning(vol->sb, "Error allocating page " "buffers. Redirtying page so we try " diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 331910fa8442..860b3b2ff47d 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c @@ -631,7 +631,8 @@ static int ntfs_prepare_pages_for_non_resident_write(struct page **pages, * the page is uptodate/dirty. */ if (!page_has_buffers(page)) { - create_empty_buffers(page, blocksize, 0); + create_empty_buffers(vi->i_mapping, page, blocksize, + 0); if (unlikely(!page_has_buffers(page))) return -ENOMEM; } diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 2d1d3afc9664..82e92c7f032f 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c @@ -629,7 +629,7 @@ int ocfs2_map_page_blocks(struct page *page, u64 *p_blkno, unsigned int bsize = i_blocksize(inode); if (!page_has_buffers(page)) - create_empty_buffers(page, bsize, 0); + create_empty_buffers(inode->i_mapping, page, bsize, 0); head = page_buffers(page); for (bh = head, block_start = 0; bh != head || !block_start; diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index c045df1eb9dc..382283900326 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c @@ -2547,7 +2547,7 @@ static int reiserfs_write_full_page(struct page *page, * in the BH_Uptodate is just a sanity check. */ if (!page_has_buffers(page)) { - create_empty_buffers(page, s->s_blocksize, + create_empty_buffers(inode->i_mapping, page, s->s_blocksize, (1 << BH_Dirty) | (1 << BH_Uptodate)); } head = page_buffers(page); diff --git a/fs/ufs/util.c b/fs/ufs/util.c index 7b599af21858..e8b3d6b70ca9 100644 --- a/fs/ufs/util.c +++ b/fs/ufs/util.c @@ -277,6 +277,6 @@ struct page *ufs_get_locked_page(struct address_space *mapping, } } if (!page_has_buffers(page)) - create_empty_buffers(page, 1 << inode->i_blkbits, 0); + create_empty_buffers(mapping, page, 1 << inode->i_blkbits, 0); return page; } diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 1239bd9ce59e..d40f2947ed73 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -183,8 +183,8 @@ void set_bh_page(struct buffer_head *bh, int try_to_free_buffers(struct page *); struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size, bool retry); -void create_empty_buffers(struct page *, unsigned long, - unsigned long b_state); +void create_empty_buffers(struct address_space *mapping, struct page *page, + unsigned long blocksize, unsigned long b_state); void end_buffer_read_sync(struct address_space *mapping, struct page *page, struct buffer_head *bh, int uptodate); void end_buffer_write_sync(struct address_space *mapping, struct page *page, |