orangefs: make sure that reopening pvfs2-req won't overlap with the end of close

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
This commit is contained in:
Al Viro 2016-01-22 19:46:08 -05:00 committed by Mike Marshall
parent 96acf9d65e
commit fee25ce125

View File

@ -85,7 +85,7 @@ static int orangefs_devreq_open(struct inode *inode, struct file *file)
mutex_lock(&devreq_mutex); mutex_lock(&devreq_mutex);
if (open_access_count == 0) { if (open_access_count == 0) {
open_access_count++; open_access_count = 1;
ret = 0; ret = 0;
} else { } else {
DUMP_DEVICE_ERROR(); DUMP_DEVICE_ERROR();
@ -533,12 +533,11 @@ static int orangefs_devreq_release(struct inode *inode, struct file *file)
if (orangefs_get_bufmap_init()) if (orangefs_get_bufmap_init())
orangefs_bufmap_finalize(); orangefs_bufmap_finalize();
open_access_count--; open_access_count = -1;
unmounted = mark_all_pending_mounts(); unmounted = mark_all_pending_mounts();
gossip_debug(GOSSIP_DEV_DEBUG, "ORANGEFS Device Close: Filesystem(s) %s\n", gossip_debug(GOSSIP_DEV_DEBUG, "ORANGEFS Device Close: Filesystem(s) %s\n",
(unmounted ? "UNMOUNTED" : "MOUNTED")); (unmounted ? "UNMOUNTED" : "MOUNTED"));
mutex_unlock(&devreq_mutex);
/* /*
* Walk through the list of ops in the request list, mark them * Walk through the list of ops in the request list, mark them
@ -552,6 +551,8 @@ static int orangefs_devreq_release(struct inode *inode, struct file *file)
purge_inprogress_ops(); purge_inprogress_ops();
gossip_debug(GOSSIP_DEV_DEBUG, gossip_debug(GOSSIP_DEV_DEBUG,
"pvfs2-client-core: device close complete\n"); "pvfs2-client-core: device close complete\n");
open_access_count = 0;
mutex_unlock(&devreq_mutex);
return 0; return 0;
} }