@@ -2929,7 +2929,7 @@ int nvme_get_log(struct nvme_ctrl *ctrl, u32 nsid, u8 log_page, u8 lsp, u8 csi,
2929
2929
static int nvme_get_effects_log (struct nvme_ctrl * ctrl , u8 csi ,
2930
2930
struct nvme_effects_log * * log )
2931
2931
{
2932
- struct nvme_cel * cel = xa_load (& ctrl -> cels , csi );
2932
+ struct nvme_effects_log * cel = xa_load (& ctrl -> cels , csi );
2933
2933
int ret ;
2934
2934
2935
2935
if (cel )
@@ -2940,16 +2940,15 @@ static int nvme_get_effects_log(struct nvme_ctrl *ctrl, u8 csi,
2940
2940
return - ENOMEM ;
2941
2941
2942
2942
ret = nvme_get_log (ctrl , 0x00 , NVME_LOG_CMD_EFFECTS , 0 , csi ,
2943
- & cel -> log , sizeof (cel -> log ), 0 );
2943
+ cel , sizeof (* cel ), 0 );
2944
2944
if (ret ) {
2945
2945
kfree (cel );
2946
2946
return ret ;
2947
2947
}
2948
2948
2949
- cel -> csi = csi ;
2950
- xa_store (& ctrl -> cels , cel -> csi , cel , GFP_KERNEL );
2949
+ xa_store (& ctrl -> cels , csi , cel , GFP_KERNEL );
2951
2950
out :
2952
- * log = & cel -> log ;
2951
+ * log = cel ;
2953
2952
return 0 ;
2954
2953
}
2955
2954
@@ -4374,6 +4373,19 @@ void nvme_uninit_ctrl(struct nvme_ctrl *ctrl)
4374
4373
}
4375
4374
EXPORT_SYMBOL_GPL (nvme_uninit_ctrl );
4376
4375
4376
+ static void nvme_free_cels (struct nvme_ctrl * ctrl )
4377
+ {
4378
+ struct nvme_effects_log * cel ;
4379
+ unsigned long i ;
4380
+
4381
+ xa_for_each (& ctrl -> cels , i , cel ) {
4382
+ xa_erase (& ctrl -> cels , i );
4383
+ kfree (cel );
4384
+ }
4385
+
4386
+ xa_destroy (& ctrl -> cels );
4387
+ }
4388
+
4377
4389
static void nvme_free_ctrl (struct device * dev )
4378
4390
{
4379
4391
struct nvme_ctrl * ctrl =
@@ -4383,8 +4395,7 @@ static void nvme_free_ctrl(struct device *dev)
4383
4395
if (!subsys || ctrl -> instance != subsys -> instance )
4384
4396
ida_simple_remove (& nvme_instance_ida , ctrl -> instance );
4385
4397
4386
- xa_destroy (& ctrl -> cels );
4387
-
4398
+ nvme_free_cels (ctrl );
4388
4399
nvme_mpath_uninit (ctrl );
4389
4400
__free_page (ctrl -> discard_page );
4390
4401
0 commit comments