@@ -226,10 +226,10 @@ void nvdimm_drvdata_release(struct kref *kref)
226226 struct resource * res , * _r ;
227227
228228 dev_dbg (dev , "trace\n" );
229- nvdimm_bus_lock ( dev );
230- for_each_dpa_resource_safe (ndd , res , _r )
231- nvdimm_free_dpa (ndd , res );
232- nvdimm_bus_unlock ( dev );
229+ scoped_guard ( nvdimm_bus , dev ) {
230+ for_each_dpa_resource_safe (ndd , res , _r )
231+ nvdimm_free_dpa (ndd , res );
232+ }
233233
234234 kvfree (ndd -> data );
235235 kfree (ndd );
@@ -319,23 +319,20 @@ static DEVICE_ATTR_RO(state);
319319static ssize_t __available_slots_show (struct nvdimm_drvdata * ndd , char * buf )
320320{
321321 struct device * dev ;
322- ssize_t rc ;
323322 u32 nfree ;
324323
325324 if (!ndd )
326325 return - ENXIO ;
327326
328327 dev = ndd -> dev ;
329- nvdimm_bus_lock (dev );
328+ guard ( nvdimm_bus ) (dev );
330329 nfree = nd_label_nfree (ndd );
331330 if (nfree - 1 > nfree ) {
332331 dev_WARN_ONCE (dev , 1 , "we ate our last label?\n" );
333332 nfree = 0 ;
334333 } else
335334 nfree -- ;
336- rc = sprintf (buf , "%d\n" , nfree );
337- nvdimm_bus_unlock (dev );
338- return rc ;
335+ return sprintf (buf , "%d\n" , nfree );
339336}
340337
341338static ssize_t available_slots_show (struct device * dev ,
@@ -388,21 +385,15 @@ static ssize_t security_store(struct device *dev,
388385 struct device_attribute * attr , const char * buf , size_t len )
389386
390387{
391- ssize_t rc ;
392-
393388 /*
394389 * Require all userspace triggered security management to be
395390 * done while probing is idle and the DIMM is not in active use
396391 * in any region.
397392 */
398- device_lock (dev );
399- nvdimm_bus_lock (dev );
393+ guard ( device ) (dev );
394+ guard ( nvdimm_bus ) (dev );
400395 wait_nvdimm_bus_probe_idle (dev );
401- rc = nvdimm_security_store (dev , buf , len );
402- nvdimm_bus_unlock (dev );
403- device_unlock (dev );
404-
405- return rc ;
396+ return nvdimm_security_store (dev , buf , len );
406397}
407398static DEVICE_ATTR_RW (security );
408399
@@ -454,9 +445,8 @@ static ssize_t result_show(struct device *dev, struct device_attribute *attr, ch
454445 if (!nvdimm -> fw_ops )
455446 return - EOPNOTSUPP ;
456447
457- nvdimm_bus_lock (dev );
448+ guard ( nvdimm_bus ) (dev );
458449 result = nvdimm -> fw_ops -> activate_result (nvdimm );
459- nvdimm_bus_unlock (dev );
460450
461451 switch (result ) {
462452 case NVDIMM_FWA_RESULT_NONE :
@@ -483,9 +473,8 @@ static ssize_t activate_show(struct device *dev, struct device_attribute *attr,
483473 if (!nvdimm -> fw_ops )
484474 return - EOPNOTSUPP ;
485475
486- nvdimm_bus_lock (dev );
476+ guard ( nvdimm_bus ) (dev );
487477 state = nvdimm -> fw_ops -> activate_state (nvdimm );
488- nvdimm_bus_unlock (dev );
489478
490479 switch (state ) {
491480 case NVDIMM_FWA_IDLE :
@@ -516,9 +505,8 @@ static ssize_t activate_store(struct device *dev, struct device_attribute *attr,
516505 else
517506 return - EINVAL ;
518507
519- nvdimm_bus_lock (dev );
508+ guard ( nvdimm_bus ) (dev );
520509 rc = nvdimm -> fw_ops -> arm (nvdimm , arg );
521- nvdimm_bus_unlock (dev );
522510
523511 if (rc < 0 )
524512 return rc ;
@@ -545,9 +533,8 @@ static umode_t nvdimm_firmware_visible(struct kobject *kobj, struct attribute *a
545533 if (!nvdimm -> fw_ops )
546534 return 0 ;
547535
548- nvdimm_bus_lock (dev );
536+ guard ( nvdimm_bus ) (dev );
549537 cap = nd_desc -> fw_ops -> capability (nd_desc );
550- nvdimm_bus_unlock (dev );
551538
552539 if (cap < NVDIMM_FWA_CAP_QUIESCE )
553540 return 0 ;
@@ -641,11 +628,10 @@ void nvdimm_delete(struct nvdimm *nvdimm)
641628 bool dev_put = false;
642629
643630 /* We are shutting down. Make state frozen artificially. */
644- nvdimm_bus_lock (dev );
645- set_bit (NVDIMM_SECURITY_FROZEN , & nvdimm -> sec .flags );
646- if (test_and_clear_bit (NDD_WORK_PENDING , & nvdimm -> flags ))
647- dev_put = true;
648- nvdimm_bus_unlock (dev );
631+ scoped_guard (nvdimm_bus , dev ) {
632+ set_bit (NVDIMM_SECURITY_FROZEN , & nvdimm -> sec .flags );
633+ dev_put = test_and_clear_bit (NDD_WORK_PENDING , & nvdimm -> flags );
634+ }
649635 cancel_delayed_work_sync (& nvdimm -> dwork );
650636 if (dev_put )
651637 put_device (dev );
0 commit comments