projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4a4e07c
)
ocfs2/dlm: call dlm_lockres_put without resource spinlock
author
alex chen
<
[email protected]
>
Thu, 9 Oct 2014 22:25:00 +0000
(15:25 -0700)
committer
Linus Torvalds
<
[email protected]
>
Fri, 10 Oct 2014 02:25:47 +0000
(22:25 -0400)
dlm_lockres_put() should be called without &res->spinlock, otherwise a
deadlock case may happen.
spin_lock(&res->spinlock)
...
dlm_lockres_put
->dlm_lockres_release
->dlm_print_one_lock_resource
->spin_lock(&res->spinlock)
Signed-off-by: Alex Chen <
[email protected]
>
Reviewed-by: Joseph Qi <
[email protected]
>
Cc: Mark Fasheh <
[email protected]
>
Cc: Joel Becker <
[email protected]
>
Signed-off-by: Andrew Morton <
[email protected]
>
Signed-off-by: Linus Torvalds <
[email protected]
>
fs/ocfs2/dlm/dlmrecovery.c
patch
|
blob
|
history
diff --git
a/fs/ocfs2/dlm/dlmrecovery.c
b/fs/ocfs2/dlm/dlmrecovery.c
index 45067faf5695d54d74af0933c8ea403ec4f1a5b3..3365839d29716f101759c6dc86355393ee7c3ab4 100644
(file)
--- a/
fs/ocfs2/dlm/dlmrecovery.c
+++ b/
fs/ocfs2/dlm/dlmrecovery.c
@@
-1710,9
+1710,12
@@
int dlm_master_requery_handler(struct o2net_msg *msg, u32 len, void *data,
BUG();
} else
__dlm_lockres_grab_inflight_worker(dlm, res);
- } else /* put.. incase we are not the master */
+ spin_unlock(&res->spinlock);
+ } else {
+ /* put.. incase we are not the master */
+ spin_unlock(&res->spinlock);
dlm_lockres_put(res);
- spin_unlock(&res->spinlock);
+ }
}
spin_unlock(&dlm->spinlock);