diff options
Diffstat (limited to 'fs/xfs/xfs_buf.c')
| -rw-r--r-- | fs/xfs/xfs_buf.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 4db6e8d780f6..4c6e86d861fd 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1815,22 +1815,27 @@ xfs_alloc_buftarg(  	btp->bt_daxdev = dax_dev;  	if (xfs_setsize_buftarg_early(btp, bdev)) -		goto error; +		goto error_free;  	if (list_lru_init(&btp->bt_lru)) -		goto error; +		goto error_free;  	if (percpu_counter_init(&btp->bt_io_count, 0, GFP_KERNEL)) -		goto error; +		goto error_lru;  	btp->bt_shrinker.count_objects = xfs_buftarg_shrink_count;  	btp->bt_shrinker.scan_objects = xfs_buftarg_shrink_scan;  	btp->bt_shrinker.seeks = DEFAULT_SEEKS;  	btp->bt_shrinker.flags = SHRINKER_NUMA_AWARE; -	register_shrinker(&btp->bt_shrinker); +	if (register_shrinker(&btp->bt_shrinker)) +		goto error_pcpu;  	return btp; -error: +error_pcpu: +	percpu_counter_destroy(&btp->bt_io_count); +error_lru: +	list_lru_destroy(&btp->bt_lru); +error_free:  	kmem_free(btp);  	return NULL;  }  |