afs: do not allow two shutdown sequences in parallel 16/12016/8
authorMarcio Barbosa <mbarbosa@sinenomine.net>
Tue, 29 Dec 2015 13:31:43 +0000 (10:31 -0300)
committerBenjamin Kaduk <kaduk@mit.edu>
Sat, 23 Jan 2016 19:27:30 +0000 (14:27 -0500)
commit70fd9bc6dcc79cb25e98cdcfd0f085c4bf4f310a
treece7dc99c25645966a3cb3bcb521a2e8acf3abdde
parenta4c4b786059ac7d5f9ecc5ec07727f000b62c13f
afs: do not allow two shutdown sequences in parallel

Often, ‘afsd -shutdown’ is called right after ‘umount’.
Both commands hold the glock before calling ‘afs_shutdown’.
However, one of the functions called by 'afs_shutdown', namely,
‘afs_FlushVCBs’, might drop the glock when the global
'afs_shuttingdown' is still equal to 0. As a result, a scenario
with two shutdown sequences proceeding in parallel is possible.

To fix the problem, the global ‘afs_shuttingdown’ is used as an
enumerated type to make sure that the second thread will not run
‘afs_shutdown’ while the first one is stuck inside ‘afs_FlushVCBs’.

Change-Id: Iffa89d82278b0df5fb90fc35608af66d8e8db29e
Reviewed-on: http://gerrit.openafs.org/12016
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Chas Williams <3chas3@gmail.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
22 files changed:
src/afs/AIX/osi_file.c
src/afs/DARWIN/osi_file.c
src/afs/DARWIN/osi_module.c
src/afs/FBSD/osi_file.c
src/afs/HPUX/osi_file.c
src/afs/HPUX/osi_vnodeops.c
src/afs/IRIX/osi_file.c
src/afs/LINUX/osi_file.c
src/afs/LINUX/osi_vnodeops.c
src/afs/NBSD/osi_file.c
src/afs/OBSD/osi_file.c
src/afs/SOLARIS/osi_file.c
src/afs/SOLARIS/osi_vnodeops.c
src/afs/UKERNEL/osi_vnodeops.c
src/afs/VNOPS/afs_vnop_attrs.c
src/afs/VNOPS/afs_vnop_fid.c
src/afs/afs.h
src/afs/afs_call.c
src/afs/afs_osi_pag.c
src/afs/afs_pag_call.c
src/afs/afs_vcache.c
src/rx/SOLARIS/rx_knet.c