mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 18:51:27 +00:00
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/trunk@2860 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1258,15 +1258,13 @@ void scst_tgt_sysfs_del(struct scst_tgt *tgt)
|
||||
tgt->tgt_kobj_release_cmpl = &c;
|
||||
|
||||
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);
|
||||
@@ -1767,9 +1765,9 @@ void scst_dev_sysfs_del(struct scst_device *dev)
|
||||
dev->dev_kobj_release_cmpl = &c;
|
||||
|
||||
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);
|
||||
@@ -3383,12 +3381,11 @@ void scst_acg_sysfs_del(struct scst_acg *acg)
|
||||
acg->acg_kobj_release_cmpl = &c;
|
||||
|
||||
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