ext2: perform dax_device lookup at mount
The ->iomap_begin() operation is a hot path, so cache the fs_dax_get_by_host() result at mount time to avoid the incurring the hash lookup overhead on a per-i/o basis. Cc: "Theodore Ts'o" <tytso@mit.edu> Cc: Andreas Dilger <adilger.kernel@dilger.ca> Reviewed-by: Jan Kara <jack@suse.cz> Reported-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
@@ -171,6 +171,7 @@ static void ext2_put_super (struct super_block * sb)
|
||||
brelse (sbi->s_sbh);
|
||||
sb->s_fs_info = NULL;
|
||||
kfree(sbi->s_blockgroup_lock);
|
||||
fs_put_dax(sbi->s_daxdev);
|
||||
kfree(sbi);
|
||||
}
|
||||
|
||||
@@ -813,6 +814,7 @@ static unsigned long descriptor_loc(struct super_block *sb,
|
||||
|
||||
static int ext2_fill_super(struct super_block *sb, void *data, int silent)
|
||||
{
|
||||
struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev);
|
||||
struct buffer_head * bh;
|
||||
struct ext2_sb_info * sbi;
|
||||
struct ext2_super_block * es;
|
||||
@@ -842,6 +844,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
|
||||
}
|
||||
sb->s_fs_info = sbi;
|
||||
sbi->s_sb_block = sb_block;
|
||||
sbi->s_daxdev = dax_dev;
|
||||
|
||||
spin_lock_init(&sbi->s_lock);
|
||||
|
||||
@@ -1200,6 +1203,7 @@ failed_sbi:
|
||||
kfree(sbi->s_blockgroup_lock);
|
||||
kfree(sbi);
|
||||
failed:
|
||||
fs_put_dax(dax_dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user