|
@@ -320,31 +320,21 @@ fail_option_alloc:
|
|
struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
const char *dev_name, char *data)
|
|
const char *dev_name, char *data)
|
|
{
|
|
{
|
|
- int retval = -EINVAL;
|
|
|
|
struct p9_fid *fid;
|
|
struct p9_fid *fid;
|
|
- int rc;
|
|
|
|
|
|
+ int rc = -ENOMEM;
|
|
|
|
|
|
v9ses->uname = kstrdup(V9FS_DEFUSER, GFP_KERNEL);
|
|
v9ses->uname = kstrdup(V9FS_DEFUSER, GFP_KERNEL);
|
|
if (!v9ses->uname)
|
|
if (!v9ses->uname)
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
|
|
|
+ goto err_names;
|
|
|
|
|
|
v9ses->aname = kstrdup(V9FS_DEFANAME, GFP_KERNEL);
|
|
v9ses->aname = kstrdup(V9FS_DEFANAME, GFP_KERNEL);
|
|
- if (!v9ses->aname) {
|
|
|
|
- kfree(v9ses->uname);
|
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
|
- }
|
|
|
|
|
|
+ if (!v9ses->aname)
|
|
|
|
+ goto err_names;
|
|
init_rwsem(&v9ses->rename_sem);
|
|
init_rwsem(&v9ses->rename_sem);
|
|
|
|
|
|
rc = bdi_setup_and_register(&v9ses->bdi, "9p");
|
|
rc = bdi_setup_and_register(&v9ses->bdi, "9p");
|
|
- if (rc) {
|
|
|
|
- kfree(v9ses->aname);
|
|
|
|
- kfree(v9ses->uname);
|
|
|
|
- return ERR_PTR(rc);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- spin_lock(&v9fs_sessionlist_lock);
|
|
|
|
- list_add(&v9ses->slist, &v9fs_sessionlist);
|
|
|
|
- spin_unlock(&v9fs_sessionlist_lock);
|
|
|
|
|
|
+ if (rc)
|
|
|
|
+ goto err_names;
|
|
|
|
|
|
v9ses->uid = INVALID_UID;
|
|
v9ses->uid = INVALID_UID;
|
|
v9ses->dfltuid = V9FS_DEFUID;
|
|
v9ses->dfltuid = V9FS_DEFUID;
|
|
@@ -352,10 +342,9 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
|
|
|
|
v9ses->clnt = p9_client_create(dev_name, data);
|
|
v9ses->clnt = p9_client_create(dev_name, data);
|
|
if (IS_ERR(v9ses->clnt)) {
|
|
if (IS_ERR(v9ses->clnt)) {
|
|
- retval = PTR_ERR(v9ses->clnt);
|
|
|
|
- v9ses->clnt = NULL;
|
|
|
|
|
|
+ rc = PTR_ERR(v9ses->clnt);
|
|
p9_debug(P9_DEBUG_ERROR, "problem initializing 9p client\n");
|
|
p9_debug(P9_DEBUG_ERROR, "problem initializing 9p client\n");
|
|
- goto error;
|
|
|
|
|
|
+ goto err_bdi;
|
|
}
|
|
}
|
|
|
|
|
|
v9ses->flags = V9FS_ACCESS_USER;
|
|
v9ses->flags = V9FS_ACCESS_USER;
|
|
@@ -368,10 +357,8 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
}
|
|
}
|
|
|
|
|
|
rc = v9fs_parse_options(v9ses, data);
|
|
rc = v9fs_parse_options(v9ses, data);
|
|
- if (rc < 0) {
|
|
|
|
- retval = rc;
|
|
|
|
- goto error;
|
|
|
|
- }
|
|
|
|
|
|
+ if (rc < 0)
|
|
|
|
+ goto err_clnt;
|
|
|
|
|
|
v9ses->maxdata = v9ses->clnt->msize - P9_IOHDRSZ;
|
|
v9ses->maxdata = v9ses->clnt->msize - P9_IOHDRSZ;
|
|
|
|
|
|
@@ -405,10 +392,9 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
fid = p9_client_attach(v9ses->clnt, NULL, v9ses->uname, INVALID_UID,
|
|
fid = p9_client_attach(v9ses->clnt, NULL, v9ses->uname, INVALID_UID,
|
|
v9ses->aname);
|
|
v9ses->aname);
|
|
if (IS_ERR(fid)) {
|
|
if (IS_ERR(fid)) {
|
|
- retval = PTR_ERR(fid);
|
|
|
|
- fid = NULL;
|
|
|
|
|
|
+ rc = PTR_ERR(fid);
|
|
p9_debug(P9_DEBUG_ERROR, "cannot attach\n");
|
|
p9_debug(P9_DEBUG_ERROR, "cannot attach\n");
|
|
- goto error;
|
|
|
|
|
|
+ goto err_clnt;
|
|
}
|
|
}
|
|
|
|
|
|
if ((v9ses->flags & V9FS_ACCESS_MASK) == V9FS_ACCESS_SINGLE)
|
|
if ((v9ses->flags & V9FS_ACCESS_MASK) == V9FS_ACCESS_SINGLE)
|
|
@@ -420,12 +406,20 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
/* register the session for caching */
|
|
/* register the session for caching */
|
|
v9fs_cache_session_get_cookie(v9ses);
|
|
v9fs_cache_session_get_cookie(v9ses);
|
|
#endif
|
|
#endif
|
|
|
|
+ spin_lock(&v9fs_sessionlist_lock);
|
|
|
|
+ list_add(&v9ses->slist, &v9fs_sessionlist);
|
|
|
|
+ spin_unlock(&v9fs_sessionlist_lock);
|
|
|
|
|
|
return fid;
|
|
return fid;
|
|
|
|
|
|
-error:
|
|
|
|
|
|
+err_clnt:
|
|
|
|
+ p9_client_destroy(v9ses->clnt);
|
|
|
|
+err_bdi:
|
|
bdi_destroy(&v9ses->bdi);
|
|
bdi_destroy(&v9ses->bdi);
|
|
- return ERR_PTR(retval);
|
|
|
|
|
|
+err_names:
|
|
|
|
+ kfree(v9ses->uname);
|
|
|
|
+ kfree(v9ses->aname);
|
|
|
|
+ return ERR_PTR(rc);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|