Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-12566 mdc: hold lock while walking changelog dev list
[fs/lustre-release.git]
/
lustre
/
mdc
/
mdc_changelog.c
diff --git
a/lustre/mdc/mdc_changelog.c
b/lustre/mdc/mdc_changelog.c
index
fe1ef6e
..
fe7e1b2
100644
(file)
--- a/
lustre/mdc/mdc_changelog.c
+++ b/
lustre/mdc/mdc_changelog.c
@@
-645,6
+645,7
@@
chlg_registered_dev_find_by_name(const char *name)
{
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;
@@
-663,6
+664,7
@@
chlg_registered_dev_find_by_obd(const struct obd_device *obd)
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)
@@
-738,6
+740,7
@@
static void chlg_dev_clear(struct kref *kref)
ced_refs);
ENTRY;
+ LASSERT(mutex_is_locked(&chlg_registered_dev_lock));
list_del(&entry->ced_link);
misc_deregister(&entry->ced_misc);
OBD_FREE_PTR(entry);
@@
-749,10
+752,11
@@
static void chlg_dev_clear(struct kref *kref)
*/
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;
+ ENTRY;
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);