diff options
author | Christoph Hellwig <hch@lst.de> | 2015-01-14 04:42:36 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-01-20 16:03:04 -0500 |
commit | de1414a654e66b81b5348dbc5259ecf2fb61655e (patch) | |
tree | 2b3d60d6c0dc87ba33caff3e326d5648831d6176 | |
parent | 26ff13047e3dc6c0230a629867e8dbd4a15a7626 (diff) |
fs: export inode_to_bdi and use it in favor of mapping->backing_dev_info
Now that we got rid of the bdi abuse on character devices we can always use
sb->s_bdi to get at the backing_dev_info for a file, except for the block
device special case. Export inode_to_bdi and replace uses of
mapping->backing_dev_info with it to prepare for the removal of
mapping->backing_dev_info.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | fs/btrfs/file.c | 2 | ||||
-rw-r--r-- | fs/ceph/file.c | 2 | ||||
-rw-r--r-- | fs/ext2/ialloc.c | 2 | ||||
-rw-r--r-- | fs/ext4/super.c | 2 | ||||
-rw-r--r-- | fs/fs-writeback.c | 3 | ||||
-rw-r--r-- | fs/fuse/file.c | 10 | ||||
-rw-r--r-- | fs/gfs2/aops.c | 2 | ||||
-rw-r--r-- | fs/gfs2/super.c | 2 | ||||
-rw-r--r-- | fs/nfs/filelayout/filelayout.c | 2 | ||||
-rw-r--r-- | fs/nfs/write.c | 6 | ||||
-rw-r--r-- | fs/ntfs/file.c | 3 | ||||
-rw-r--r-- | fs/ocfs2/file.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_file.c | 2 | ||||
-rw-r--r-- | include/linux/backing-dev.h | 6 | ||||
-rw-r--r-- | include/trace/events/writeback.h | 6 | ||||
-rw-r--r-- | mm/fadvise.c | 4 | ||||
-rw-r--r-- | mm/filemap.c | 4 | ||||
-rw-r--r-- | mm/filemap_xip.c | 3 | ||||
-rw-r--r-- | mm/page-writeback.c | 29 | ||||
-rw-r--r-- | mm/readahead.c | 4 | ||||
-rw-r--r-- | mm/truncate.c | 2 | ||||
-rw-r--r-- | mm/vmscan.c | 4 |
22 files changed, 52 insertions, 50 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index e4090259569b..835c04a874fd 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1746,7 +1746,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb, | |||
1746 | 1746 | ||
1747 | mutex_lock(&inode->i_mutex); | 1747 | mutex_lock(&inode->i_mutex); |
1748 | 1748 | ||
1749 | current->backing_dev_info = inode->i_mapping->backing_dev_info; | 1749 | current->backing_dev_info = inode_to_bdi(inode); |
1750 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 1750 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
1751 | if (err) { | 1751 | if (err) { |
1752 | mutex_unlock(&inode->i_mutex); | 1752 | mutex_unlock(&inode->i_mutex); |
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index ce74b394b49d..905986dd4c3c 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c | |||
@@ -945,7 +945,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
945 | mutex_lock(&inode->i_mutex); | 945 | mutex_lock(&inode->i_mutex); |
946 | 946 | ||
947 | /* We can write back this queue in page reclaim */ | 947 | /* We can write back this queue in page reclaim */ |
948 | current->backing_dev_info = file->f_mapping->backing_dev_info; | 948 | current->backing_dev_info = inode_to_bdi(inode); |
949 | 949 | ||
950 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 950 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
951 | if (err) | 951 | if (err) |
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index 7d66fb0e4cca..6c14bb8322fa 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c | |||
@@ -170,7 +170,7 @@ static void ext2_preread_inode(struct inode *inode) | |||
170 | struct ext2_group_desc * gdp; | 170 | struct ext2_group_desc * gdp; |
171 | struct backing_dev_info *bdi; | 171 | struct backing_dev_info *bdi; |
172 | 172 | ||
173 | bdi = inode->i_mapping->backing_dev_info; | 173 | bdi = inode_to_bdi(inode); |
174 | if (bdi_read_congested(bdi)) | 174 | if (bdi_read_congested(bdi)) |
175 | return; | 175 | return; |
176 | if (bdi_write_congested(bdi)) | 176 | if (bdi_write_congested(bdi)) |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 74c5f53595fb..ad88e601a6cd 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -334,7 +334,7 @@ static void save_error_info(struct super_block *sb, const char *func, | |||
334 | static int block_device_ejected(struct super_block *sb) | 334 | static int block_device_ejected(struct super_block *sb) |
335 | { | 335 | { |
336 | struct inode *bd_inode = sb->s_bdev->bd_inode; | 336 | struct inode *bd_inode = sb->s_bdev->bd_inode; |
337 | struct backing_dev_info *bdi = bd_inode->i_mapping->backing_dev_info; | 337 | struct backing_dev_info *bdi = inode_to_bdi(bd_inode); |
338 | 338 | ||
339 | return bdi->dev == NULL; | 339 | return bdi->dev == NULL; |
340 | } | 340 | } |
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index e8116a44cc29..a20b1145f4d5 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -66,7 +66,7 @@ int writeback_in_progress(struct backing_dev_info *bdi) | |||
66 | } | 66 | } |
67 | EXPORT_SYMBOL(writeback_in_progress); | 67 | EXPORT_SYMBOL(writeback_in_progress); |
68 | 68 | ||
69 | static inline struct backing_dev_info *inode_to_bdi(struct inode *inode) | 69 | struct backing_dev_info *inode_to_bdi(struct inode *inode) |
70 | { | 70 | { |
71 | struct super_block *sb = inode->i_sb; | 71 | struct super_block *sb = inode->i_sb; |
72 | #ifdef CONFIG_BLOCK | 72 | #ifdef CONFIG_BLOCK |
@@ -75,6 +75,7 @@ static inline struct backing_dev_info *inode_to_bdi(struct inode *inode) | |||
75 | #endif | 75 | #endif |
76 | return sb->s_bdi; | 76 | return sb->s_bdi; |
77 | } | 77 | } |
78 | EXPORT_SYMBOL_GPL(inode_to_bdi); | ||
78 | 79 | ||
79 | static inline struct inode *wb_inode(struct list_head *head) | 80 | static inline struct inode *wb_inode(struct list_head *head) |
80 | { | 81 | { |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 760b2c552197..19d80b82d344 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -1159,7 +1159,7 @@ static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
1159 | mutex_lock(&inode->i_mutex); | 1159 | mutex_lock(&inode->i_mutex); |
1160 | 1160 | ||
1161 | /* We can write back this queue in page reclaim */ | 1161 | /* We can write back this queue in page reclaim */ |
1162 | current->backing_dev_info = mapping->backing_dev_info; | 1162 | current->backing_dev_info = inode_to_bdi(inode); |
1163 | 1163 | ||
1164 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 1164 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
1165 | if (err) | 1165 | if (err) |
@@ -1464,7 +1464,7 @@ static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) | |||
1464 | { | 1464 | { |
1465 | struct inode *inode = req->inode; | 1465 | struct inode *inode = req->inode; |
1466 | struct fuse_inode *fi = get_fuse_inode(inode); | 1466 | struct fuse_inode *fi = get_fuse_inode(inode); |
1467 | struct backing_dev_info *bdi = inode->i_mapping->backing_dev_info; | 1467 | struct backing_dev_info *bdi = inode_to_bdi(inode); |
1468 | int i; | 1468 | int i; |
1469 | 1469 | ||
1470 | list_del(&req->writepages_entry); | 1470 | list_del(&req->writepages_entry); |
@@ -1658,7 +1658,7 @@ static int fuse_writepage_locked(struct page *page) | |||
1658 | req->end = fuse_writepage_end; | 1658 | req->end = fuse_writepage_end; |
1659 | req->inode = inode; | 1659 | req->inode = inode; |
1660 | 1660 | ||
1661 | inc_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK); | 1661 | inc_bdi_stat(inode_to_bdi(inode), BDI_WRITEBACK); |
1662 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); | 1662 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); |
1663 | 1663 | ||
1664 | spin_lock(&fc->lock); | 1664 | spin_lock(&fc->lock); |
@@ -1768,7 +1768,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req, | |||
1768 | 1768 | ||
1769 | if (old_req->num_pages == 1 && (old_req->state == FUSE_REQ_INIT || | 1769 | if (old_req->num_pages == 1 && (old_req->state == FUSE_REQ_INIT || |
1770 | old_req->state == FUSE_REQ_PENDING)) { | 1770 | old_req->state == FUSE_REQ_PENDING)) { |
1771 | struct backing_dev_info *bdi = page->mapping->backing_dev_info; | 1771 | struct backing_dev_info *bdi = inode_to_bdi(page->mapping->host); |
1772 | 1772 | ||
1773 | copy_highpage(old_req->pages[0], page); | 1773 | copy_highpage(old_req->pages[0], page); |
1774 | spin_unlock(&fc->lock); | 1774 | spin_unlock(&fc->lock); |
@@ -1872,7 +1872,7 @@ static int fuse_writepages_fill(struct page *page, | |||
1872 | req->page_descs[req->num_pages].offset = 0; | 1872 | req->page_descs[req->num_pages].offset = 0; |
1873 | req->page_descs[req->num_pages].length = PAGE_SIZE; | 1873 | req->page_descs[req->num_pages].length = PAGE_SIZE; |
1874 | 1874 | ||
1875 | inc_bdi_stat(page->mapping->backing_dev_info, BDI_WRITEBACK); | 1875 | inc_bdi_stat(inode_to_bdi(inode), BDI_WRITEBACK); |
1876 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); | 1876 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); |
1877 | 1877 | ||
1878 | err = 0; | 1878 | err = 0; |
diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c index 805b37fed638..4ad4f94edebe 100644 --- a/fs/gfs2/aops.c +++ b/fs/gfs2/aops.c | |||
@@ -289,7 +289,7 @@ continue_unlock: | |||
289 | if (!clear_page_dirty_for_io(page)) | 289 | if (!clear_page_dirty_for_io(page)) |
290 | goto continue_unlock; | 290 | goto continue_unlock; |
291 | 291 | ||
292 | trace_wbc_writepage(wbc, mapping->backing_dev_info); | 292 | trace_wbc_writepage(wbc, inode_to_bdi(inode)); |
293 | 293 | ||
294 | ret = __gfs2_jdata_writepage(page, wbc); | 294 | ret = __gfs2_jdata_writepage(page, wbc); |
295 | if (unlikely(ret)) { | 295 | if (unlikely(ret)) { |
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index 5b327f837de7..1666382b198d 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -743,7 +743,7 @@ static int gfs2_write_inode(struct inode *inode, struct writeback_control *wbc) | |||
743 | struct gfs2_inode *ip = GFS2_I(inode); | 743 | struct gfs2_inode *ip = GFS2_I(inode); |
744 | struct gfs2_sbd *sdp = GFS2_SB(inode); | 744 | struct gfs2_sbd *sdp = GFS2_SB(inode); |
745 | struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); | 745 | struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); |
746 | struct backing_dev_info *bdi = metamapping->backing_dev_info; | 746 | struct backing_dev_info *bdi = inode_to_bdi(metamapping->host); |
747 | int ret = 0; | 747 | int ret = 0; |
748 | 748 | ||
749 | if (wbc->sync_mode == WB_SYNC_ALL) | 749 | if (wbc->sync_mode == WB_SYNC_ALL) |
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c index 7afb52f6a25a..51aa889611cf 100644 --- a/fs/nfs/filelayout/filelayout.c +++ b/fs/nfs/filelayout/filelayout.c | |||
@@ -1081,7 +1081,7 @@ mds_commit: | |||
1081 | spin_unlock(cinfo->lock); | 1081 | spin_unlock(cinfo->lock); |
1082 | if (!cinfo->dreq) { | 1082 | if (!cinfo->dreq) { |
1083 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 1083 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
1084 | inc_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 1084 | inc_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
1085 | BDI_RECLAIMABLE); | 1085 | BDI_RECLAIMABLE); |
1086 | __mark_inode_dirty(req->wb_context->dentry->d_inode, | 1086 | __mark_inode_dirty(req->wb_context->dentry->d_inode, |
1087 | I_DIRTY_DATASYNC); | 1087 | I_DIRTY_DATASYNC); |
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index af3af685a9e3..298abcc5281b 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -786,7 +786,7 @@ nfs_request_add_commit_list(struct nfs_page *req, struct list_head *dst, | |||
786 | spin_unlock(cinfo->lock); | 786 | spin_unlock(cinfo->lock); |
787 | if (!cinfo->dreq) { | 787 | if (!cinfo->dreq) { |
788 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 788 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
789 | inc_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 789 | inc_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
790 | BDI_RECLAIMABLE); | 790 | BDI_RECLAIMABLE); |
791 | __mark_inode_dirty(req->wb_context->dentry->d_inode, | 791 | __mark_inode_dirty(req->wb_context->dentry->d_inode, |
792 | I_DIRTY_DATASYNC); | 792 | I_DIRTY_DATASYNC); |
@@ -853,7 +853,7 @@ static void | |||
853 | nfs_clear_page_commit(struct page *page) | 853 | nfs_clear_page_commit(struct page *page) |
854 | { | 854 | { |
855 | dec_zone_page_state(page, NR_UNSTABLE_NFS); | 855 | dec_zone_page_state(page, NR_UNSTABLE_NFS); |
856 | dec_bdi_stat(page_file_mapping(page)->backing_dev_info, BDI_RECLAIMABLE); | 856 | dec_bdi_stat(inode_to_bdi(page_file_mapping(page)->host), BDI_RECLAIMABLE); |
857 | } | 857 | } |
858 | 858 | ||
859 | /* Called holding inode (/cinfo) lock */ | 859 | /* Called holding inode (/cinfo) lock */ |
@@ -1564,7 +1564,7 @@ void nfs_retry_commit(struct list_head *page_list, | |||
1564 | nfs_mark_request_commit(req, lseg, cinfo); | 1564 | nfs_mark_request_commit(req, lseg, cinfo); |
1565 | if (!cinfo->dreq) { | 1565 | if (!cinfo->dreq) { |
1566 | dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 1566 | dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
1567 | dec_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 1567 | dec_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
1568 | BDI_RECLAIMABLE); | 1568 | BDI_RECLAIMABLE); |
1569 | } | 1569 | } |
1570 | nfs_unlock_and_release_request(req); | 1570 | nfs_unlock_and_release_request(req); |
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 643faa44f22b..1da9b2d184dc 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -19,6 +19,7 @@ | |||
19 | * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/backing-dev.h> | ||
22 | #include <linux/buffer_head.h> | 23 | #include <linux/buffer_head.h> |
23 | #include <linux/gfp.h> | 24 | #include <linux/gfp.h> |
24 | #include <linux/pagemap.h> | 25 | #include <linux/pagemap.h> |
@@ -2091,7 +2092,7 @@ static ssize_t ntfs_file_aio_write_nolock(struct kiocb *iocb, | |||
2091 | count = iov_length(iov, nr_segs); | 2092 | count = iov_length(iov, nr_segs); |
2092 | pos = *ppos; | 2093 | pos = *ppos; |
2093 | /* We can write back this queue in page reclaim. */ | 2094 | /* We can write back this queue in page reclaim. */ |
2094 | current->backing_dev_info = mapping->backing_dev_info; | 2095 | current->backing_dev_info = inode_to_bdi(inode); |
2095 | written = 0; | 2096 | written = 0; |
2096 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 2097 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
2097 | if (err) | 2098 | if (err) |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 3950693dd0f6..abe7d98d6178 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -2363,7 +2363,7 @@ relock: | |||
2363 | goto out_dio; | 2363 | goto out_dio; |
2364 | } | 2364 | } |
2365 | } else { | 2365 | } else { |
2366 | current->backing_dev_info = file->f_mapping->backing_dev_info; | 2366 | current->backing_dev_info = inode_to_bdi(inode); |
2367 | written = generic_perform_write(file, from, *ppos); | 2367 | written = generic_perform_write(file, from, *ppos); |
2368 | if (likely(written >= 0)) | 2368 | if (likely(written >= 0)) |
2369 | iocb->ki_pos = *ppos + written; | 2369 | iocb->ki_pos = *ppos + written; |
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 13e974e6a889..5684ac3e7d18 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c | |||
@@ -699,7 +699,7 @@ xfs_file_buffered_aio_write( | |||
699 | 699 | ||
700 | iov_iter_truncate(from, count); | 700 | iov_iter_truncate(from, count); |
701 | /* We can write back this queue in page reclaim */ | 701 | /* We can write back this queue in page reclaim */ |
702 | current->backing_dev_info = mapping->backing_dev_info; | 702 | current->backing_dev_info = inode_to_bdi(inode); |
703 | 703 | ||
704 | write_retry: | 704 | write_retry: |
705 | trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); | 705 | trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 478f95d92d73..ed59dee03a71 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
@@ -106,6 +106,8 @@ struct backing_dev_info { | |||
106 | #endif | 106 | #endif |
107 | }; | 107 | }; |
108 | 108 | ||
109 | struct backing_dev_info *inode_to_bdi(struct inode *inode); | ||
110 | |||
109 | int __must_check bdi_init(struct backing_dev_info *bdi); | 111 | int __must_check bdi_init(struct backing_dev_info *bdi); |
110 | void bdi_destroy(struct backing_dev_info *bdi); | 112 | void bdi_destroy(struct backing_dev_info *bdi); |
111 | 113 | ||
@@ -303,12 +305,12 @@ static inline bool bdi_cap_account_writeback(struct backing_dev_info *bdi) | |||
303 | 305 | ||
304 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) | 306 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) |
305 | { | 307 | { |
306 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); | 308 | return bdi_cap_writeback_dirty(inode_to_bdi(mapping->host)); |
307 | } | 309 | } |
308 | 310 | ||
309 | static inline bool mapping_cap_account_dirty(struct address_space *mapping) | 311 | static inline bool mapping_cap_account_dirty(struct address_space *mapping) |
310 | { | 312 | { |
311 | return bdi_cap_account_dirty(mapping->backing_dev_info); | 313 | return bdi_cap_account_dirty(inode_to_bdi(mapping->host)); |
312 | } | 314 | } |
313 | 315 | ||
314 | static inline int bdi_sched_wait(void *word) | 316 | static inline int bdi_sched_wait(void *word) |
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h index cee02d65ab3f..74f5207bd090 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h | |||
@@ -47,7 +47,7 @@ TRACE_EVENT(writeback_dirty_page, | |||
47 | 47 | ||
48 | TP_fast_assign( | 48 | TP_fast_assign( |
49 | strncpy(__entry->name, | 49 | strncpy(__entry->name, |
50 | mapping ? dev_name(mapping->backing_dev_info->dev) : "(unknown)", 32); | 50 | mapping ? dev_name(inode_to_bdi(mapping->host)->dev) : "(unknown)", 32); |
51 | __entry->ino = mapping ? mapping->host->i_ino : 0; | 51 | __entry->ino = mapping ? mapping->host->i_ino : 0; |
52 | __entry->index = page->index; | 52 | __entry->index = page->index; |
53 | ), | 53 | ), |
@@ -72,7 +72,7 @@ DECLARE_EVENT_CLASS(writeback_dirty_inode_template, | |||
72 | ), | 72 | ), |
73 | 73 | ||
74 | TP_fast_assign( | 74 | TP_fast_assign( |
75 | struct backing_dev_info *bdi = inode->i_mapping->backing_dev_info; | 75 | struct backing_dev_info *bdi = inode_to_bdi(inode); |
76 | 76 | ||
77 | /* may be called for files on pseudo FSes w/ unregistered bdi */ | 77 | /* may be called for files on pseudo FSes w/ unregistered bdi */ |
78 | strncpy(__entry->name, | 78 | strncpy(__entry->name, |
@@ -116,7 +116,7 @@ DECLARE_EVENT_CLASS(writeback_write_inode_template, | |||
116 | 116 | ||
117 | TP_fast_assign( | 117 | TP_fast_assign( |
118 | strncpy(__entry->name, | 118 | strncpy(__entry->name, |
119 | dev_name(inode->i_mapping->backing_dev_info->dev), 32); | 119 | dev_name(inode_to_bdi(inode)->dev), 32); |
120 | __entry->ino = inode->i_ino; | 120 | __entry->ino = inode->i_ino; |
121 | __entry->sync_mode = wbc->sync_mode; | 121 | __entry->sync_mode = wbc->sync_mode; |
122 | ), | 122 | ), |
diff --git a/mm/fadvise.c b/mm/fadvise.c index 2ad7adf4f0a4..fac23ecf8d72 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c | |||
@@ -73,7 +73,7 @@ SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) | |||
73 | else | 73 | else |
74 | endbyte--; /* inclusive */ | 74 | endbyte--; /* inclusive */ |
75 | 75 | ||
76 | bdi = mapping->backing_dev_info; | 76 | bdi = inode_to_bdi(mapping->host); |
77 | 77 | ||
78 | switch (advice) { | 78 | switch (advice) { |
79 | case POSIX_FADV_NORMAL: | 79 | case POSIX_FADV_NORMAL: |
@@ -113,7 +113,7 @@ SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) | |||
113 | case POSIX_FADV_NOREUSE: | 113 | case POSIX_FADV_NOREUSE: |
114 | break; | 114 | break; |
115 | case POSIX_FADV_DONTNEED: | 115 | case POSIX_FADV_DONTNEED: |
116 | if (!bdi_write_congested(mapping->backing_dev_info)) | 116 | if (!bdi_write_congested(bdi)) |
117 | __filemap_fdatawrite_range(mapping, offset, endbyte, | 117 | __filemap_fdatawrite_range(mapping, offset, endbyte, |
118 | WB_SYNC_NONE); | 118 | WB_SYNC_NONE); |
119 | 119 | ||
diff --git a/mm/filemap.c b/mm/filemap.c index 673e4581a2e5..5d7c23c26f81 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
@@ -211,7 +211,7 @@ void __delete_from_page_cache(struct page *page, void *shadow) | |||
211 | */ | 211 | */ |
212 | if (PageDirty(page) && mapping_cap_account_dirty(mapping)) { | 212 | if (PageDirty(page) && mapping_cap_account_dirty(mapping)) { |
213 | dec_zone_page_state(page, NR_FILE_DIRTY); | 213 | dec_zone_page_state(page, NR_FILE_DIRTY); |
214 | dec_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE); | 214 | dec_bdi_stat(inode_to_bdi(mapping->host), BDI_RECLAIMABLE); |
215 | } | 215 | } |
216 | } | 216 | } |
217 | 217 | ||
@@ -2565,7 +2565,7 @@ ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
2565 | size_t count = iov_iter_count(from); | 2565 | size_t count = iov_iter_count(from); |
2566 | 2566 | ||
2567 | /* We can write back this queue in page reclaim */ | 2567 | /* We can write back this queue in page reclaim */ |
2568 | current->backing_dev_info = mapping->backing_dev_info; | 2568 | current->backing_dev_info = inode_to_bdi(inode); |
2569 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 2569 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
2570 | if (err) | 2570 | if (err) |
2571 | goto out; | 2571 | goto out; |
diff --git a/mm/filemap_xip.c b/mm/filemap_xip.c index 0d105aeff82f..26897fbfbe19 100644 --- a/mm/filemap_xip.c +++ b/mm/filemap_xip.c | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/fs.h> | 11 | #include <linux/fs.h> |
12 | #include <linux/backing-dev.h> | ||
12 | #include <linux/pagemap.h> | 13 | #include <linux/pagemap.h> |
13 | #include <linux/export.h> | 14 | #include <linux/export.h> |
14 | #include <linux/uio.h> | 15 | #include <linux/uio.h> |
@@ -410,7 +411,7 @@ xip_file_write(struct file *filp, const char __user *buf, size_t len, | |||
410 | count = len; | 411 | count = len; |
411 | 412 | ||
412 | /* We can write back this queue in page reclaim */ | 413 | /* We can write back this queue in page reclaim */ |
413 | current->backing_dev_info = mapping->backing_dev_info; | 414 | current->backing_dev_info = inode_to_bdi(inode); |
414 | 415 | ||
415 | ret = generic_write_checks(filp, &pos, &count, S_ISBLK(inode->i_mode)); | 416 | ret = generic_write_checks(filp, &pos, &count, S_ISBLK(inode->i_mode)); |
416 | if (ret) | 417 | if (ret) |
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 6f4335238e33..d4cbb4bd7d1c 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -1351,7 +1351,7 @@ static void balance_dirty_pages(struct address_space *mapping, | |||
1351 | unsigned long task_ratelimit; | 1351 | unsigned long task_ratelimit; |
1352 | unsigned long dirty_ratelimit; | 1352 | unsigned long dirty_ratelimit; |
1353 | unsigned long pos_ratio; | 1353 | unsigned long pos_ratio; |
1354 | struct backing_dev_info *bdi = mapping->backing_dev_info; | 1354 | struct backing_dev_info *bdi = inode_to_bdi(mapping->host); |
1355 | bool strictlimit = bdi->capabilities & BDI_CAP_STRICTLIMIT; | 1355 | bool strictlimit = bdi->capabilities & BDI_CAP_STRICTLIMIT; |
1356 | unsigned long start_time = jiffies; | 1356 | unsigned long start_time = jiffies; |
1357 | 1357 | ||
@@ -1574,7 +1574,7 @@ DEFINE_PER_CPU(int, dirty_throttle_leaks) = 0; | |||
1574 | */ | 1574 | */ |
1575 | void balance_dirty_pages_ratelimited(struct address_space *mapping) | 1575 | void balance_dirty_pages_ratelimited(struct address_space *mapping) |
1576 | { | 1576 | { |
1577 | struct backing_dev_info *bdi = mapping->backing_dev_info; | 1577 | struct backing_dev_info *bdi = inode_to_bdi(mapping->host); |
1578 | int ratelimit; | 1578 | int ratelimit; |
1579 | int *p; | 1579 | int *p; |
1580 | 1580 | ||
@@ -1929,7 +1929,7 @@ continue_unlock: | |||
1929 | if (!clear_page_dirty_for_io(page)) | 1929 | if (!clear_page_dirty_for_io(page)) |
1930 | goto continue_unlock; | 1930 | goto continue_unlock; |
1931 | 1931 | ||
1932 | trace_wbc_writepage(wbc, mapping->backing_dev_info); | 1932 | trace_wbc_writepage(wbc, inode_to_bdi(mapping->host)); |
1933 | ret = (*writepage)(page, wbc, data); | 1933 | ret = (*writepage)(page, wbc, data); |
1934 | if (unlikely(ret)) { | 1934 | if (unlikely(ret)) { |
1935 | if (ret == AOP_WRITEPAGE_ACTIVATE) { | 1935 | if (ret == AOP_WRITEPAGE_ACTIVATE) { |
@@ -2094,10 +2094,12 @@ void account_page_dirtied(struct page *page, struct address_space *mapping) | |||
2094 | trace_writeback_dirty_page(page, mapping); | 2094 | trace_writeback_dirty_page(page, mapping); |
2095 | 2095 | ||
2096 | if (mapping_cap_account_dirty(mapping)) { | 2096 | if (mapping_cap_account_dirty(mapping)) { |
2097 | struct backing_dev_info *bdi = inode_to_bdi(mapping->host); | ||
2098 | |||
2097 | __inc_zone_page_state(page, NR_FILE_DIRTY); | 2099 | __inc_zone_page_state(page, NR_FILE_DIRTY); |
2098 | __inc_zone_page_state(page, NR_DIRTIED); | 2100 | __inc_zone_page_state(page, NR_DIRTIED); |
2099 | __inc_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE); | 2101 | __inc_bdi_stat(bdi, BDI_RECLAIMABLE); |
2100 | __inc_bdi_stat(mapping->backing_dev_info, BDI_DIRTIED); | 2102 | __inc_bdi_stat(bdi, BDI_DIRTIED); |
2101 | task_io_account_write(PAGE_CACHE_SIZE); | 2103 | task_io_account_write(PAGE_CACHE_SIZE); |
2102 | current->nr_dirtied++; | 2104 | current->nr_dirtied++; |
2103 | this_cpu_inc(bdp_ratelimits); | 2105 | this_cpu_inc(bdp_ratelimits); |
@@ -2156,7 +2158,7 @@ void account_page_redirty(struct page *page) | |||
2156 | if (mapping && mapping_cap_account_dirty(mapping)) { | 2158 | if (mapping && mapping_cap_account_dirty(mapping)) { |
2157 | current->nr_dirtied--; | 2159 | current->nr_dirtied--; |
2158 | dec_zone_page_state(page, NR_DIRTIED); | 2160 | dec_zone_page_state(page, NR_DIRTIED); |
2159 | dec_bdi_stat(mapping->backing_dev_info, BDI_DIRTIED); | 2161 | dec_bdi_stat(inode_to_bdi(mapping->host), BDI_DIRTIED); |
2160 | } | 2162 | } |
2161 | } | 2163 | } |
2162 | EXPORT_SYMBOL(account_page_redirty); | 2164 | EXPORT_SYMBOL(account_page_redirty); |
@@ -2295,7 +2297,7 @@ int clear_page_dirty_for_io(struct page *page) | |||
2295 | */ | 2297 | */ |
2296 | if (TestClearPageDirty(page)) { | 2298 | if (TestClearPageDirty(page)) { |
2297 | dec_zone_page_state(page, NR_FILE_DIRTY); | 2299 | dec_zone_page_state(page, NR_FILE_DIRTY); |
2298 | dec_bdi_stat(mapping->backing_dev_info, | 2300 | dec_bdi_stat(inode_to_bdi(mapping->host), |
2299 | BDI_RECLAIMABLE); | 2301 | BDI_RECLAIMABLE); |
2300 | return 1; | 2302 | return 1; |
2301 | } | 2303 | } |
@@ -2315,7 +2317,7 @@ int test_clear_page_writeback(struct page *page) | |||
2315 | 2317 | ||
2316 | memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags); | 2318 | memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags); |
2317 | if (mapping) { | 2319 | if (mapping) { |
2318 | struct backing_dev_info *bdi = mapping->backing_dev_info; | 2320 | struct backing_dev_info *bdi = inode_to_bdi(mapping->host); |
2319 | unsigned long flags; | 2321 | unsigned long flags; |
2320 | 2322 | ||
2321 | spin_lock_irqsave(&mapping->tree_lock, flags); | 2323 | spin_lock_irqsave(&mapping->tree_lock, flags); |
@@ -2352,7 +2354,7 @@ int __test_set_page_writeback(struct page *page, bool keep_write) | |||
2352 | 2354 | ||
2353 | memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags); | 2355 | memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags); |
2354 | if (mapping) { | 2356 | if (mapping) { |
2355 | struct backing_dev_info *bdi = mapping->backing_dev_info; | 2357 | struct backing_dev_info *bdi = inode_to_bdi(mapping->host); |
2356 | unsigned long flags; | 2358 | unsigned long flags; |
2357 | 2359 | ||
2358 | spin_lock_irqsave(&mapping->tree_lock, flags); | 2360 | spin_lock_irqsave(&mapping->tree_lock, flags); |
@@ -2406,12 +2408,7 @@ EXPORT_SYMBOL(mapping_tagged); | |||
2406 | */ | 2408 | */ |
2407 | void wait_for_stable_page(struct page *page) | 2409 | void wait_for_stable_page(struct page *page) |
2408 | { | 2410 | { |
2409 | struct address_space *mapping = page_mapping(page); | 2411 | if (bdi_cap_stable_pages_required(inode_to_bdi(page->mapping->host))) |
2410 | struct backing_dev_info *bdi = mapping->backing_dev_info; | 2412 | wait_on_page_writeback(page); |
2411 | |||
2412 | if (!bdi_cap_stable_pages_required(bdi)) | ||
2413 | return; | ||
2414 | |||
2415 | wait_on_page_writeback(page); | ||
2416 | } | 2413 | } |
2417 | EXPORT_SYMBOL_GPL(wait_for_stable_page); | 2414 | EXPORT_SYMBOL_GPL(wait_for_stable_page); |
diff --git a/mm/readahead.c b/mm/readahead.c index 17b9172ec37f..935675844b2e 100644 --- a/mm/readahead.c +++ b/mm/readahead.c | |||
@@ -27,7 +27,7 @@ | |||
27 | void | 27 | void |
28 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping) | 28 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping) |
29 | { | 29 | { |
30 | ra->ra_pages = mapping->backing_dev_info->ra_pages; | 30 | ra->ra_pages = inode_to_bdi(mapping->host)->ra_pages; |
31 | ra->prev_pos = -1; | 31 | ra->prev_pos = -1; |
32 | } | 32 | } |
33 | EXPORT_SYMBOL_GPL(file_ra_state_init); | 33 | EXPORT_SYMBOL_GPL(file_ra_state_init); |
@@ -541,7 +541,7 @@ page_cache_async_readahead(struct address_space *mapping, | |||
541 | /* | 541 | /* |
542 | * Defer asynchronous read-ahead on IO congestion. | 542 | * Defer asynchronous read-ahead on IO congestion. |
543 | */ | 543 | */ |
544 | if (bdi_read_congested(mapping->backing_dev_info)) | 544 | if (bdi_read_congested(inode_to_bdi(mapping->host))) |
545 | return; | 545 | return; |
546 | 546 | ||
547 | /* do read-ahead */ | 547 | /* do read-ahead */ |
diff --git a/mm/truncate.c b/mm/truncate.c index f1e4d6052369..ddec5a5966d7 100644 --- a/mm/truncate.c +++ b/mm/truncate.c | |||
@@ -112,7 +112,7 @@ void cancel_dirty_page(struct page *page, unsigned int account_size) | |||
112 | struct address_space *mapping = page->mapping; | 112 | struct address_space *mapping = page->mapping; |
113 | if (mapping && mapping_cap_account_dirty(mapping)) { | 113 | if (mapping && mapping_cap_account_dirty(mapping)) { |
114 | dec_zone_page_state(page, NR_FILE_DIRTY); | 114 | dec_zone_page_state(page, NR_FILE_DIRTY); |
115 | dec_bdi_stat(mapping->backing_dev_info, | 115 | dec_bdi_stat(inode_to_bdi(mapping->host), |
116 | BDI_RECLAIMABLE); | 116 | BDI_RECLAIMABLE); |
117 | if (account_size) | 117 | if (account_size) |
118 | task_io_account_cancelled_write(account_size); | 118 | task_io_account_cancelled_write(account_size); |
diff --git a/mm/vmscan.c b/mm/vmscan.c index ab2505c3ef54..e00a16393f21 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -497,7 +497,7 @@ static pageout_t pageout(struct page *page, struct address_space *mapping, | |||
497 | } | 497 | } |
498 | if (mapping->a_ops->writepage == NULL) | 498 | if (mapping->a_ops->writepage == NULL) |
499 | return PAGE_ACTIVATE; | 499 | return PAGE_ACTIVATE; |
500 | if (!may_write_to_queue(mapping->backing_dev_info, sc)) | 500 | if (!may_write_to_queue(inode_to_bdi(mapping->host), sc)) |
501 | return PAGE_KEEP; | 501 | return PAGE_KEEP; |
502 | 502 | ||
503 | if (clear_page_dirty_for_io(page)) { | 503 | if (clear_page_dirty_for_io(page)) { |
@@ -876,7 +876,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, | |||
876 | */ | 876 | */ |
877 | mapping = page_mapping(page); | 877 | mapping = page_mapping(page); |
878 | if (((dirty || writeback) && mapping && | 878 | if (((dirty || writeback) && mapping && |
879 | bdi_write_congested(mapping->backing_dev_info)) || | 879 | bdi_write_congested(inode_to_bdi(mapping->host))) || |
880 | (writeback && PageReclaim(page))) | 880 | (writeback && PageReclaim(page))) |
881 | nr_congested++; | 881 | nr_congested++; |
882 | 882 | ||