aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2015-01-14 04:42:36 -0500
committerJens Axboe <axboe@fb.com>2015-01-20 16:03:04 -0500
commitde1414a654e66b81b5348dbc5259ecf2fb61655e (patch)
tree2b3d60d6c0dc87ba33caff3e326d5648831d6176
parent26ff13047e3dc6c0230a629867e8dbd4a15a7626 (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.c2
-rw-r--r--fs/ceph/file.c2
-rw-r--r--fs/ext2/ialloc.c2
-rw-r--r--fs/ext4/super.c2
-rw-r--r--fs/fs-writeback.c3
-rw-r--r--fs/fuse/file.c10
-rw-r--r--fs/gfs2/aops.c2
-rw-r--r--fs/gfs2/super.c2
-rw-r--r--fs/nfs/filelayout/filelayout.c2
-rw-r--r--fs/nfs/write.c6
-rw-r--r--fs/ntfs/file.c3
-rw-r--r--fs/ocfs2/file.c2
-rw-r--r--fs/xfs/xfs_file.c2
-rw-r--r--include/linux/backing-dev.h6
-rw-r--r--include/trace/events/writeback.h6
-rw-r--r--mm/fadvise.c4
-rw-r--r--mm/filemap.c4
-rw-r--r--mm/filemap_xip.c3
-rw-r--r--mm/page-writeback.c29
-rw-r--r--mm/readahead.c4
-rw-r--r--mm/truncate.c2
-rw-r--r--mm/vmscan.c4
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,
334static int block_device_ejected(struct super_block *sb) 334static 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}
67EXPORT_SYMBOL(writeback_in_progress); 67EXPORT_SYMBOL(writeback_in_progress);
68 68
69static inline struct backing_dev_info *inode_to_bdi(struct inode *inode) 69struct 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}
78EXPORT_SYMBOL_GPL(inode_to_bdi);
78 79
79static inline struct inode *wb_inode(struct list_head *head) 80static 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
853nfs_clear_page_commit(struct page *page) 853nfs_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
704write_retry: 704write_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
109struct backing_dev_info *inode_to_bdi(struct inode *inode);
110
109int __must_check bdi_init(struct backing_dev_info *bdi); 111int __must_check bdi_init(struct backing_dev_info *bdi);
110void bdi_destroy(struct backing_dev_info *bdi); 112void 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
304static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) 306static 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
309static inline bool mapping_cap_account_dirty(struct address_space *mapping) 311static 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
314static inline int bdi_sched_wait(void *word) 316static 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 */
1575void balance_dirty_pages_ratelimited(struct address_space *mapping) 1575void 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}
2162EXPORT_SYMBOL(account_page_redirty); 2164EXPORT_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 */
2407void wait_for_stable_page(struct page *page) 2409void 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}
2417EXPORT_SYMBOL_GPL(wait_for_stable_page); 2414EXPORT_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 @@
27void 27void
28file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping) 28file_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}
33EXPORT_SYMBOL_GPL(file_ra_state_init); 33EXPORT_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