summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérôme Glisse <jglisse@redhat.com>2018-03-29 16:08:10 -0400
committerJérôme Glisse <jglisse@redhat.com>2018-04-04 14:37:08 -0400
commit2b9cab0f3462d4f88b8a1eb0029d4dd2f60568ea (patch)
treef54d4394fd44154dcd0fa1efb57bd0f6636c1b33
parentb0c42be87e64f49d1f9af00ccd0096681fc190d7 (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.c7
-rw-r--r--fs/ext4/inode.c4
-rw-r--r--fs/ext4/move_extent.c5
-rw-r--r--fs/gfs2/aops.c5
-rw-r--r--fs/gfs2/bmap.c6
-rw-r--r--fs/gfs2/meta_io.c2
-rw-r--r--fs/gfs2/quota.c2
-rw-r--r--fs/mpage.c3
-rw-r--r--fs/nilfs2/mdt.c2
-rw-r--r--fs/nilfs2/page.c5
-rw-r--r--fs/nilfs2/segment.c3
-rw-r--r--fs/ntfs/aops.c6
-rw-r--r--fs/ntfs/file.c3
-rw-r--r--fs/ocfs2/aops.c2
-rw-r--r--fs/reiserfs/inode.c2
-rw-r--r--fs/ufs/util.c2
-rw-r--r--include/linux/buffer_head.h4
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,