aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/block_dev.c8
-rw-r--r--fs/fs-writeback.c16
-rw-r--r--include/linux/backing-dev.h18
-rw-r--r--include/linux/fs.h8
-rw-r--r--mm/backing-dev.c1
5 files changed, 26 insertions, 25 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c
index e545cbfbe5b2..f04c873a7365 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -547,7 +547,8 @@ static struct file_system_type bd_type = {
547 .kill_sb = kill_anon_super, 547 .kill_sb = kill_anon_super,
548}; 548};
549 549
550static struct super_block *blockdev_superblock __read_mostly; 550struct super_block *blockdev_superblock __read_mostly;
551EXPORT_SYMBOL_GPL(blockdev_superblock);
551 552
552void __init bdev_cache_init(void) 553void __init bdev_cache_init(void)
553{ 554{
@@ -688,11 +689,6 @@ static struct block_device *bd_acquire(struct inode *inode)
688 return bdev; 689 return bdev;
689} 690}
690 691
691int sb_is_blkdev_sb(struct super_block *sb)
692{
693 return sb == blockdev_superblock;
694}
695
696/* Call when you free inode */ 692/* Call when you free inode */
697 693
698void bd_forget(struct inode *inode) 694void bd_forget(struct inode *inode)
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index a69d2e10d514..34d1cb854fc1 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -78,22 +78,6 @@ int writeback_in_progress(struct backing_dev_info *bdi)
78} 78}
79EXPORT_SYMBOL(writeback_in_progress); 79EXPORT_SYMBOL(writeback_in_progress);
80 80
81struct backing_dev_info *inode_to_bdi(struct inode *inode)
82{
83 struct super_block *sb;
84
85 if (!inode)
86 return &noop_backing_dev_info;
87
88 sb = inode->i_sb;
89#ifdef CONFIG_BLOCK
90 if (sb_is_blkdev_sb(sb))
91 return blk_get_backing_dev_info(I_BDEV(inode));
92#endif
93 return sb->s_bdi;
94}
95EXPORT_SYMBOL_GPL(inode_to_bdi);
96
97static inline struct inode *wb_inode(struct list_head *head) 81static inline struct inode *wb_inode(struct list_head *head)
98{ 82{
99 return list_entry(head, struct inode, i_wb_list); 83 return list_entry(head, struct inode, i_wb_list);
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
index 5e39f7a8efed..785782034e86 100644
--- a/include/linux/backing-dev.h
+++ b/include/linux/backing-dev.h
@@ -11,11 +11,10 @@
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/fs.h> 12#include <linux/fs.h>
13#include <linux/sched.h> 13#include <linux/sched.h>
14#include <linux/blkdev.h>
14#include <linux/writeback.h> 15#include <linux/writeback.h>
15#include <linux/backing-dev-defs.h> 16#include <linux/backing-dev-defs.h>
16 17
17struct backing_dev_info *inode_to_bdi(struct inode *inode);
18
19int __must_check bdi_init(struct backing_dev_info *bdi); 18int __must_check bdi_init(struct backing_dev_info *bdi);
20void bdi_destroy(struct backing_dev_info *bdi); 19void bdi_destroy(struct backing_dev_info *bdi);
21 20
@@ -149,6 +148,21 @@ extern struct backing_dev_info noop_backing_dev_info;
149 148
150int writeback_in_progress(struct backing_dev_info *bdi); 149int writeback_in_progress(struct backing_dev_info *bdi);
151 150
151static inline struct backing_dev_info *inode_to_bdi(struct inode *inode)
152{
153 struct super_block *sb;
154
155 if (!inode)
156 return &noop_backing_dev_info;
157
158 sb = inode->i_sb;
159#ifdef CONFIG_BLOCK
160 if (sb_is_blkdev_sb(sb))
161 return blk_get_backing_dev_info(I_BDEV(inode));
162#endif
163 return sb->s_bdi;
164}
165
152static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits) 166static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits)
153{ 167{
154 if (bdi->congested_fn) 168 if (bdi->congested_fn)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 1ef63900243c..ce100b87fba3 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2240,7 +2240,13 @@ extern struct super_block *freeze_bdev(struct block_device *);
2240extern void emergency_thaw_all(void); 2240extern void emergency_thaw_all(void);
2241extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); 2241extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
2242extern int fsync_bdev(struct block_device *); 2242extern int fsync_bdev(struct block_device *);
2243extern int sb_is_blkdev_sb(struct super_block *sb); 2243
2244extern struct super_block *blockdev_superblock;
2245
2246static inline bool sb_is_blkdev_sb(struct super_block *sb)
2247{
2248 return sb == blockdev_superblock;
2249}
2244#else 2250#else
2245static inline void bd_forget(struct inode *inode) {} 2251static inline void bd_forget(struct inode *inode) {}
2246static inline int sync_blockdev(struct block_device *bdev) { return 0; } 2252static inline int sync_blockdev(struct block_device *bdev) { return 0; }
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index ff85ecb7d6a1..b0707d1b1d38 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -18,6 +18,7 @@ struct backing_dev_info noop_backing_dev_info = {
18 .name = "noop", 18 .name = "noop",
19 .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, 19 .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK,
20}; 20};
21EXPORT_SYMBOL_GPL(noop_backing_dev_info);
21 22
22static struct class *bdi_class; 23static struct class *bdi_class;
23 24