bdi: make inode_to_bdi() inline
Now that bdi definitions are moved to backing-dev-defs.h, backing-dev.h can include blkdev.h and inline inode_to_bdi() without worrying about introducing circular include dependency. The function gets called from hot paths and fairly trivial. This patch makes inode_to_bdi() and sb_is_blkdev_sb() that the function calls inline. blockdev_superblock and noop_backing_dev_info are EXPORT_GPL'd to allow the inline functions to be used from modules. While at it, make sb_is_blkdev_sb() return bool instead of int. v2: Fixed typo in description as suggested by Jan. Signed-off-by: Tejun Heo <tj@kernel.org> Reviewed-by: Jens Axboe <axboe@kernel.dk> Cc: Christoph Hellwig <hch@infradead.org> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
Родитель
66114cad64
Коммит
a212b105b0
|
@ -547,7 +547,8 @@ static struct file_system_type bd_type = {
|
|||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
static struct super_block *blockdev_superblock __read_mostly;
|
||||
struct super_block *blockdev_superblock __read_mostly;
|
||||
EXPORT_SYMBOL_GPL(blockdev_superblock);
|
||||
|
||||
void __init bdev_cache_init(void)
|
||||
{
|
||||
|
@ -688,11 +689,6 @@ static struct block_device *bd_acquire(struct inode *inode)
|
|||
return bdev;
|
||||
}
|
||||
|
||||
int sb_is_blkdev_sb(struct super_block *sb)
|
||||
{
|
||||
return sb == blockdev_superblock;
|
||||
}
|
||||
|
||||
/* Call when you free inode */
|
||||
|
||||
void bd_forget(struct inode *inode)
|
||||
|
|
|
@ -78,22 +78,6 @@ int writeback_in_progress(struct backing_dev_info *bdi)
|
|||
}
|
||||
EXPORT_SYMBOL(writeback_in_progress);
|
||||
|
||||
struct backing_dev_info *inode_to_bdi(struct inode *inode)
|
||||
{
|
||||
struct super_block *sb;
|
||||
|
||||
if (!inode)
|
||||
return &noop_backing_dev_info;
|
||||
|
||||
sb = inode->i_sb;
|
||||
#ifdef CONFIG_BLOCK
|
||||
if (sb_is_blkdev_sb(sb))
|
||||
return blk_get_backing_dev_info(I_BDEV(inode));
|
||||
#endif
|
||||
return sb->s_bdi;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(inode_to_bdi);
|
||||
|
||||
static inline struct inode *wb_inode(struct list_head *head)
|
||||
{
|
||||
return list_entry(head, struct inode, i_wb_list);
|
||||
|
|
|
@ -11,11 +11,10 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/writeback.h>
|
||||
#include <linux/backing-dev-defs.h>
|
||||
|
||||
struct backing_dev_info *inode_to_bdi(struct inode *inode);
|
||||
|
||||
int __must_check bdi_init(struct backing_dev_info *bdi);
|
||||
void bdi_destroy(struct backing_dev_info *bdi);
|
||||
|
||||
|
@ -149,6 +148,21 @@ extern struct backing_dev_info noop_backing_dev_info;
|
|||
|
||||
int writeback_in_progress(struct backing_dev_info *bdi);
|
||||
|
||||
static inline struct backing_dev_info *inode_to_bdi(struct inode *inode)
|
||||
{
|
||||
struct super_block *sb;
|
||||
|
||||
if (!inode)
|
||||
return &noop_backing_dev_info;
|
||||
|
||||
sb = inode->i_sb;
|
||||
#ifdef CONFIG_BLOCK
|
||||
if (sb_is_blkdev_sb(sb))
|
||||
return blk_get_backing_dev_info(I_BDEV(inode));
|
||||
#endif
|
||||
return sb->s_bdi;
|
||||
}
|
||||
|
||||
static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits)
|
||||
{
|
||||
if (bdi->congested_fn)
|
||||
|
|
|
@ -2240,7 +2240,13 @@ extern struct super_block *freeze_bdev(struct block_device *);
|
|||
extern void emergency_thaw_all(void);
|
||||
extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
|
||||
extern int fsync_bdev(struct block_device *);
|
||||
extern int sb_is_blkdev_sb(struct super_block *sb);
|
||||
|
||||
extern struct super_block *blockdev_superblock;
|
||||
|
||||
static inline bool sb_is_blkdev_sb(struct super_block *sb)
|
||||
{
|
||||
return sb == blockdev_superblock;
|
||||
}
|
||||
#else
|
||||
static inline void bd_forget(struct inode *inode) {}
|
||||
static inline int sync_blockdev(struct block_device *bdev) { return 0; }
|
||||
|
|
|
@ -18,6 +18,7 @@ struct backing_dev_info noop_backing_dev_info = {
|
|||
.name = "noop",
|
||||
.capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(noop_backing_dev_info);
|
||||
|
||||
static struct class *bdi_class;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче