orangefs: fix orangefs_superblock locking
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 25 Mar 2016 23:56:34 +0000 (19:56 -0400)
committerMike Marshall <hubcap@omnibond.com>
Sat, 26 Mar 2016 11:22:00 +0000 (07:22 -0400)
commit45996492e5c85aa0ac93a95d1b2d1ed56851c865
tree3ee74b07ce43cdb0b637c3747fadbb1f2ba59eb6
parent6d4c1a30b32a377083900f39c42bcacb633f99a1
orangefs: fix orangefs_superblock locking

* switch orangefs_remount() to taking ORANGEFS_SB(sb) instead of sb
* remove from the list _before_ orangefs_unmount() - request_mutex
in the latter will make sure that nothing observed in the loop in
ORANGEFS_DEV_REMOUNT_ALL handling will get freed until the end
of loop
* on removal, keep the forward pointer and zero the back one.  That
way we can drop and regain the spinlock in the loop body (again,
ORANGEFS_DEV_REMOUNT_ALL one) and still be able to get to the
rest of the list.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
fs/orangefs/devorangefs-req.c
fs/orangefs/orangefs-kernel.h
fs/orangefs/super.c