diff options
Diffstat (limited to 'fs/9p/v9fs.c')
| -rw-r--r-- | fs/9p/v9fs.c | 22 | 
1 files changed, 19 insertions, 3 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 6c7f6a25111..5c5bc848007 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c @@ -29,6 +29,7 @@  #include <linux/sched.h>  #include <linux/parser.h>  #include <linux/idr.h> +#include <linux/slab.h>  #include <net/9p/9p.h>  #include <net/9p/client.h>  #include <net/9p/transport.h> @@ -241,7 +242,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,  	list_add(&v9ses->slist, &v9fs_sessionlist);  	spin_unlock(&v9fs_sessionlist_lock); -	v9ses->flags = V9FS_PROTO_2000U | V9FS_ACCESS_USER; +	v9ses->flags = V9FS_ACCESS_USER;  	strcpy(v9ses->uname, V9FS_DEFUSER);  	strcpy(v9ses->aname, V9FS_DEFANAME);  	v9ses->uid = ~0; @@ -262,8 +263,10 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,  		goto error;  	} -	if (!p9_is_proto_dotu(v9ses->clnt)) -		v9ses->flags &= ~V9FS_PROTO_2000U; +	if (p9_is_proto_dotl(v9ses->clnt)) +		v9ses->flags |= V9FS_PROTO_2000L; +	else if (p9_is_proto_dotu(v9ses->clnt)) +		v9ses->flags |= V9FS_PROTO_2000U;  	v9ses->maxdata = v9ses->clnt->msize - P9_IOHDRSZ; @@ -340,6 +343,19 @@ void v9fs_session_cancel(struct v9fs_session_info *v9ses) {  	p9_client_disconnect(v9ses->clnt);  } +/** + * v9fs_session_begin_cancel - Begin terminate of a session + * @v9ses: session to terminate + * + * After this call we don't allow any request other than clunk. + */ + +void v9fs_session_begin_cancel(struct v9fs_session_info *v9ses) +{ +	P9_DPRINTK(P9_DEBUG_ERROR, "begin cancel session %p\n", v9ses); +	p9_client_begin_disconnect(v9ses->clnt); +} +  extern int v9fs_error_init(void);  static struct kobject *v9fs_kobj;  |