Skip to content

Commit

Permalink
bdi: make inode_to_bdi() inline
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tejun Heo authored and Jens Axboe committed Jun 2, 2015
1 parent 66114ca commit a212b10
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 25 deletions.
8 changes: 2 additions & 6 deletions fs/block_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
Expand Down
16 changes: 0 additions & 16 deletions fs/fs-writeback.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
18 changes: 16 additions & 2 deletions include/linux/backing-dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
Expand Down
1 change: 1 addition & 0 deletions mm/backing-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit a212b10

Please sign in to comment.