mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 04:00:52 +07:00
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:
parent
66114cad64
commit
a212b105b0
@ -547,7 +547,8 @@ static struct file_system_type bd_type = {
|
|||||||
.kill_sb = kill_anon_super,
|
.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)
|
void __init bdev_cache_init(void)
|
||||||
{
|
{
|
||||||
@ -688,11 +689,6 @@ static struct block_device *bd_acquire(struct inode *inode)
|
|||||||
return bdev;
|
return bdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sb_is_blkdev_sb(struct super_block *sb)
|
|
||||||
{
|
|
||||||
return sb == blockdev_superblock;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call when you free inode */
|
/* Call when you free inode */
|
||||||
|
|
||||||
void bd_forget(struct inode *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);
|
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)
|
static inline struct inode *wb_inode(struct list_head *head)
|
||||||
{
|
{
|
||||||
return list_entry(head, struct inode, i_wb_list);
|
return list_entry(head, struct inode, i_wb_list);
|
||||||
|
@ -11,11 +11,10 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/blkdev.h>
|
||||||
#include <linux/writeback.h>
|
#include <linux/writeback.h>
|
||||||
#include <linux/backing-dev-defs.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);
|
int __must_check bdi_init(struct backing_dev_info *bdi);
|
||||||
void bdi_destroy(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);
|
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)
|
static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits)
|
||||||
{
|
{
|
||||||
if (bdi->congested_fn)
|
if (bdi->congested_fn)
|
||||||
|
@ -2240,7 +2240,13 @@ extern struct super_block *freeze_bdev(struct block_device *);
|
|||||||
extern void emergency_thaw_all(void);
|
extern void emergency_thaw_all(void);
|
||||||
extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
|
extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
|
||||||
extern int fsync_bdev(struct block_device *);
|
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
|
#else
|
||||||
static inline void bd_forget(struct inode *inode) {}
|
static inline void bd_forget(struct inode *inode) {}
|
||||||
static inline int sync_blockdev(struct block_device *bdev) { return 0; }
|
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",
|
.name = "noop",
|
||||||
.capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK,
|
.capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK,
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL_GPL(noop_backing_dev_info);
|
||||||
|
|
||||||
static struct class *bdi_class;
|
static struct class *bdi_class;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user