+12
-3
drivers/md/dm-snap-persistent.c
+12
-3
drivers/md/dm-snap-persistent.c
···
847
847
static int persistent_ctr(struct dm_exception_store *store, char *options)
848
848
{
849
849
struct pstore *ps;
850
+
int r;
850
851
851
852
/* allocate the pstore */
852
853
ps = kzalloc(sizeof(*ps), GFP_KERNEL);
···
869
868
870
869
ps->metadata_wq = alloc_workqueue("ksnaphd", WQ_MEM_RECLAIM, 0);
871
870
if (!ps->metadata_wq) {
872
-
kfree(ps);
873
871
DMERR("couldn't start header metadata update thread");
874
-
return -ENOMEM;
872
+
r = -ENOMEM;
873
+
goto err_workqueue;
875
874
}
876
875
877
876
if (options) {
···
880
879
store->userspace_supports_overflow = true;
881
880
else {
882
881
DMERR("Unsupported persistent store option: %s", options);
883
-
return -EINVAL;
882
+
r = -EINVAL;
883
+
goto err_options;
884
884
}
885
885
}
886
886
887
887
store->context = ps;
888
888
889
889
return 0;
890
+
891
+
err_options:
892
+
destroy_workqueue(ps->metadata_wq);
893
+
err_workqueue:
894
+
kfree(ps);
895
+
896
+
return r;
890
897
}
891
898
892
899
static unsigned persistent_status(struct dm_exception_store *store,