orangefs: fix orangefs_superblock locking
authorAl Viro <[email protected]>
Fri, 25 Mar 2016 23:56:34 +0000 (19:56 -0400)
committerMike Marshall <[email protected]>
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 <[email protected]>
Signed-off-by: Mike Marshall <[email protected]>
fs/orangefs/devorangefs-req.c
fs/orangefs/orangefs-kernel.h
fs/orangefs/super.c