mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-18 11:11:27 +00:00
Merge of the trunk's r2860:
This patch fixes a class of race conditions in the ..._sysfs_del() functions: the kobject_put() calls should come after all kobject_del() calls because as long as the last kobject_del() call hasn't been invoked, a sysfs .show() or .store() callback may still be in progress that needs one of these kobjects. Signed-off-by: Bart Van Assche <bvanassche@acm.org> git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/2.0.0.x@2869 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1224,15 +1224,13 @@ void scst_tgt_sysfs_del(struct scst_tgt *tgt)
|
||||
TRACE_ENTRY();
|
||||
|
||||
kobject_del(tgt->tgt_sess_kobj);
|
||||
kobject_put(tgt->tgt_sess_kobj);
|
||||
|
||||
kobject_del(tgt->tgt_luns_kobj);
|
||||
kobject_put(tgt->tgt_luns_kobj);
|
||||
|
||||
kobject_del(tgt->tgt_ini_grp_kobj);
|
||||
kobject_put(tgt->tgt_ini_grp_kobj);
|
||||
|
||||
kobject_del(&tgt->tgt_kobj);
|
||||
|
||||
kobject_put(tgt->tgt_sess_kobj);
|
||||
kobject_put(tgt->tgt_luns_kobj);
|
||||
kobject_put(tgt->tgt_ini_grp_kobj);
|
||||
kobject_put(&tgt->tgt_kobj);
|
||||
|
||||
rc = wait_for_completion_timeout(&tgt->tgt_kobj_release_cmpl, HZ);
|
||||
@@ -1731,9 +1729,9 @@ void scst_dev_sysfs_del(struct scst_device *dev)
|
||||
TRACE_ENTRY();
|
||||
|
||||
kobject_del(dev->dev_exp_kobj);
|
||||
kobject_put(dev->dev_exp_kobj);
|
||||
|
||||
kobject_del(&dev->dev_kobj);
|
||||
|
||||
kobject_put(dev->dev_exp_kobj);
|
||||
kobject_put(&dev->dev_kobj);
|
||||
|
||||
rc = wait_for_completion_timeout(&dev->dev_kobj_release_cmpl, HZ);
|
||||
@@ -3161,12 +3159,11 @@ void scst_acg_sysfs_del(struct scst_acg *acg)
|
||||
TRACE_ENTRY();
|
||||
|
||||
kobject_del(acg->luns_kobj);
|
||||
kobject_put(acg->luns_kobj);
|
||||
|
||||
kobject_del(acg->initiators_kobj);
|
||||
kobject_put(acg->initiators_kobj);
|
||||
|
||||
kobject_del(&acg->acg_kobj);
|
||||
|
||||
kobject_put(acg->luns_kobj);
|
||||
kobject_put(acg->initiators_kobj);
|
||||
kobject_put(&acg->acg_kobj);
|
||||
|
||||
rc = wait_for_completion_timeout(&acg->acg_kobj_release_cmpl, HZ);
|
||||
|
||||
Reference in New Issue
Block a user