|
@@ -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;
|
|
|
}
|