summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2cf82b6)
In mdc_changelog_cdev_finish() we need chlg_registered_dev_lock
while walking and changing entries on the chlog_registered_devs
and ced_obds lists in chlg_registered_dev_find_by_obd().
Move the calling of chlg_registered_dev_find_by_obd() under the
mutex, and add assertions to the places where the lists are walked
and changed that the mutex is held.
Fixes:
1d40214d96dd ("LU-7659 mdc: expose changelog through char devices")
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: Ib62fdff87cde6a4bcfb9bea24a2ea72a933ebbe5
Reviewed-on: https://review.whamcloud.com/35668
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Hongchao Zhang <hongchao@whamcloud.com>
Reviewed-by: Quentin Bouget <quentin.bouget@cea.fr>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
{
struct chlg_registered_dev *dit;
{
struct chlg_registered_dev *dit;
+ LASSERT(mutex_is_locked(&chlg_registered_dev_lock));
list_for_each_entry(dit, &chlg_registered_devices, ced_link)
if (strcmp(name, dit->ced_name) == 0)
return dit;
list_for_each_entry(dit, &chlg_registered_devices, ced_link)
if (strcmp(name, dit->ced_name) == 0)
return dit;
struct chlg_registered_dev *dit;
struct obd_device *oit;
struct chlg_registered_dev *dit;
struct obd_device *oit;
+ LASSERT(mutex_is_locked(&chlg_registered_dev_lock));
list_for_each_entry(dit, &chlg_registered_devices, ced_link)
list_for_each_entry(oit, &dit->ced_obds,
u.cli.cl_chg_dev_linkage)
list_for_each_entry(dit, &chlg_registered_devices, ced_link)
list_for_each_entry(oit, &dit->ced_obds,
u.cli.cl_chg_dev_linkage)
+ LASSERT(mutex_is_locked(&chlg_registered_dev_lock));
list_del(&entry->ced_link);
misc_deregister(&entry->ced_misc);
OBD_FREE_PTR(entry);
list_del(&entry->ced_link);
misc_deregister(&entry->ced_misc);
OBD_FREE_PTR(entry);
*/
void mdc_changelog_cdev_finish(struct obd_device *obd)
{
*/
void mdc_changelog_cdev_finish(struct obd_device *obd)
{
- struct chlg_registered_dev *dev = chlg_registered_dev_find_by_obd(obd);
- ENTRY;
+ struct chlg_registered_dev *dev;
mutex_lock(&chlg_registered_dev_lock);
mutex_lock(&chlg_registered_dev_lock);
+ dev = chlg_registered_dev_find_by_obd(obd);
list_del_init(&obd->u.cli.cl_chg_dev_linkage);
kref_put(&dev->ced_refs, chlg_dev_clear);
mutex_unlock(&chlg_registered_dev_lock);
list_del_init(&obd->u.cli.cl_chg_dev_linkage);
kref_put(&dev->ced_refs, chlg_dev_clear);
mutex_unlock(&chlg_registered_dev_lock);