[PATCH] 9p: fix segfault caused by race condition in meta-data operations
Running dbench multithreaded exposed a race condition where fid structures were removed while in use. This patch adds semaphores to meta-data operations to protect the fid structure. Some cleanup of error-case handling in the inode operations is also included. Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
ff76e1dfc8
commit
da977b2c7e
@@ -30,6 +30,8 @@ struct v9fs_fid {
|
||||
struct list_head list; /* list of fids associated with a dentry */
|
||||
struct list_head active; /* XXX - debug */
|
||||
|
||||
struct semaphore lock;
|
||||
|
||||
u32 fid;
|
||||
unsigned char fidopen; /* set when fid is opened */
|
||||
unsigned char fidclunked; /* set when fid has already been clunked */
|
||||
@@ -55,3 +57,6 @@ struct v9fs_fid *v9fs_fid_get_created(struct dentry *);
|
||||
void v9fs_fid_destroy(struct v9fs_fid *fid);
|
||||
struct v9fs_fid *v9fs_fid_create(struct v9fs_session_info *, int fid);
|
||||
int v9fs_fid_insert(struct v9fs_fid *fid, struct dentry *dentry);
|
||||
struct v9fs_fid *v9fs_fid_clone(struct dentry *dentry);
|
||||
void v9fs_fid_clunk(struct v9fs_session_info *v9ses, struct v9fs_fid *fid);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user