Skip to content

Commit

Permalink
9p: encapsulate version function
Browse files Browse the repository at this point in the history
Alsmot all 9P client wire functions have their own (set of) functions.
Tversion is an exception as its encapsulated into the client_create code.

This patch moves the protocol specifics of this to a function to match the
rest of the code.

Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
  • Loading branch information
Eric Van Hensbergen committed Oct 17, 2008
1 parent 06b55b4 commit 6936bf6
Showing 1 changed file with 44 additions and 30 deletions.
74 changes: 44 additions & 30 deletions net/9p/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -587,16 +587,56 @@ static void p9_fid_destroy(struct p9_fid *fid)
kfree(fid);
}

struct p9_client *p9_client_create(const char *dev_name, char *options)
static int p9_client_version(struct p9_client *clnt)
{
int err, n;
struct p9_client *clnt;
int err = 0;
struct p9_fcall *tc, *rc;
struct p9_str *version;

P9_DPRINTK(P9_DEBUG_9P, "%p\n", clnt);
err = 0;
tc = NULL;
rc = NULL;

tc = p9_create_tversion(clnt->msize,
clnt->dotu ? "9P2000.u" : "9P2000");
if (IS_ERR(tc)) {
err = PTR_ERR(tc);
tc = NULL;
goto error;
}

err = p9_client_rpc(clnt, tc, &rc);
if (err)
goto error;

version = &rc->params.rversion.version;
if (version->len == 8 && !memcmp(version->str, "9P2000.u", 8))
clnt->dotu = 1;
else if (version->len == 6 && !memcmp(version->str, "9P2000", 6))
clnt->dotu = 0;
else {
err = -EREMOTEIO;
goto error;
}

if (rc->params.rversion.msize < clnt->msize)
clnt->msize = rc->params.rversion.msize;

error:
kfree(tc);
kfree(rc);

return err;
}
EXPORT_SYMBOL(p9_client_auth);

struct p9_client *p9_client_create(const char *dev_name, char *options)
{
int err;
struct p9_client *clnt;

err = 0;
clnt = kmalloc(sizeof(struct p9_client), GFP_KERNEL);
if (!clnt)
return ERR_PTR(-ENOMEM);
Expand Down Expand Up @@ -628,46 +668,20 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
P9_DPRINTK(P9_DEBUG_9P, "clnt %p trans %p msize %d dotu %d\n",
clnt, clnt->trans_mod, clnt->msize, clnt->dotu);


err = clnt->trans_mod->create(clnt, dev_name, options);
if (err)
goto error;

if ((clnt->msize+P9_IOHDRSZ) > clnt->trans_mod->maxsize)
clnt->msize = clnt->trans_mod->maxsize-P9_IOHDRSZ;

tc = p9_create_tversion(clnt->msize, clnt->dotu?"9P2000.u":"9P2000");
if (IS_ERR(tc)) {
err = PTR_ERR(tc);
tc = NULL;
goto error;
}

err = p9_client_rpc(clnt, tc, &rc);
err = p9_client_version(clnt);
if (err)
goto error;

version = &rc->params.rversion.version;
if (version->len == 8 && !memcmp(version->str, "9P2000.u", 8))
clnt->dotu = 1;
else if (version->len == 6 && !memcmp(version->str, "9P2000", 6))
clnt->dotu = 0;
else {
err = -EREMOTEIO;
goto error;
}

n = rc->params.rversion.msize;
if (n < clnt->msize)
clnt->msize = n;

kfree(tc);
kfree(rc);
return clnt;

error:
kfree(tc);
kfree(rc);
p9_client_destroy(clnt);
return ERR_PTR(err);
}
Expand Down

0 comments on commit 6936bf6

Please sign in to comment.