diff options
Diffstat (limited to 'fs/ext2/super.c')
| -rw-r--r-- | fs/ext2/super.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index d8d580b609ba..94f1fbd7d3ac 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -802,7 +802,6 @@ 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; @@ -822,17 +821,17 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)  	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);  	if (!sbi) -		goto failed; +		return -ENOMEM;  	sbi->s_blockgroup_lock =  		kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);  	if (!sbi->s_blockgroup_lock) {  		kfree(sbi); -		goto failed; +		return -ENOMEM;  	}  	sb->s_fs_info = sbi;  	sbi->s_sb_block = sb_block; -	sbi->s_daxdev = dax_dev; +	sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off);  	spin_lock_init(&sbi->s_lock);  	ret = -EINVAL; @@ -946,11 +945,13 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)  	blocksize = BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);  	if (test_opt(sb, DAX)) { -		if (!dax_supported(dax_dev, sb->s_bdev, blocksize, 0, -				bdev_nr_sectors(sb->s_bdev))) { +		if (!sbi->s_daxdev) {  			ext2_msg(sb, KERN_ERR,  				"DAX unsupported by block device. Turning off DAX.");  			clear_opt(sbi->s_mount_opt, DAX); +		} else if (blocksize != PAGE_SIZE) { +			ext2_msg(sb, KERN_ERR, "unsupported blocksize for DAX\n"); +			clear_opt(sbi->s_mount_opt, DAX);  		}  	} @@ -1199,11 +1200,10 @@ failed_mount_group_desc:  failed_mount:  	brelse(bh);  failed_sbi: +	fs_put_dax(sbi->s_daxdev);  	sb->s_fs_info = NULL;  	kfree(sbi->s_blockgroup_lock);  	kfree(sbi); -failed: -	fs_put_dax(dax_dev);  	return ret;  }  |