Commit 6936bf60d2c407449c09e3f28ec0301e1f937106

Authored by Eric Van Hensbergen
1 parent 06b55b464e

9p: encapsulate version function

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>

Showing 1 changed file with 44 additions and 30 deletions Side-by-side Diff

... ... @@ -587,16 +587,56 @@
587 587 kfree(fid);
588 588 }
589 589  
590   -struct p9_client *p9_client_create(const char *dev_name, char *options)
  590 +static int p9_client_version(struct p9_client *clnt)
591 591 {
592   - int err, n;
593   - struct p9_client *clnt;
  592 + int err = 0;
594 593 struct p9_fcall *tc, *rc;
595 594 struct p9_str *version;
596 595  
  596 + P9_DPRINTK(P9_DEBUG_9P, "%p\n", clnt);
597 597 err = 0;
598 598 tc = NULL;
599 599 rc = NULL;
  600 +
  601 + tc = p9_create_tversion(clnt->msize,
  602 + clnt->dotu ? "9P2000.u" : "9P2000");
  603 + if (IS_ERR(tc)) {
  604 + err = PTR_ERR(tc);
  605 + tc = NULL;
  606 + goto error;
  607 + }
  608 +
  609 + err = p9_client_rpc(clnt, tc, &rc);
  610 + if (err)
  611 + goto error;
  612 +
  613 + version = &rc->params.rversion.version;
  614 + if (version->len == 8 && !memcmp(version->str, "9P2000.u", 8))
  615 + clnt->dotu = 1;
  616 + else if (version->len == 6 && !memcmp(version->str, "9P2000", 6))
  617 + clnt->dotu = 0;
  618 + else {
  619 + err = -EREMOTEIO;
  620 + goto error;
  621 + }
  622 +
  623 + if (rc->params.rversion.msize < clnt->msize)
  624 + clnt->msize = rc->params.rversion.msize;
  625 +
  626 +error:
  627 + kfree(tc);
  628 + kfree(rc);
  629 +
  630 + return err;
  631 +}
  632 +EXPORT_SYMBOL(p9_client_auth);
  633 +
  634 +struct p9_client *p9_client_create(const char *dev_name, char *options)
  635 +{
  636 + int err;
  637 + struct p9_client *clnt;
  638 +
  639 + err = 0;
600 640 clnt = kmalloc(sizeof(struct p9_client), GFP_KERNEL);
601 641 if (!clnt)
602 642 return ERR_PTR(-ENOMEM);
... ... @@ -628,7 +668,6 @@
628 668 P9_DPRINTK(P9_DEBUG_9P, "clnt %p trans %p msize %d dotu %d\n",
629 669 clnt, clnt->trans_mod, clnt->msize, clnt->dotu);
630 670  
631   -
632 671 err = clnt->trans_mod->create(clnt, dev_name, options);
633 672 if (err)
634 673 goto error;
635 674  
636 675  
... ... @@ -636,38 +675,13 @@
636 675 if ((clnt->msize+P9_IOHDRSZ) > clnt->trans_mod->maxsize)
637 676 clnt->msize = clnt->trans_mod->maxsize-P9_IOHDRSZ;
638 677  
639   - tc = p9_create_tversion(clnt->msize, clnt->dotu?"9P2000.u":"9P2000");
640   - if (IS_ERR(tc)) {
641   - err = PTR_ERR(tc);
642   - tc = NULL;
643   - goto error;
644   - }
645   -
646   - err = p9_client_rpc(clnt, tc, &rc);
  678 + err = p9_client_version(clnt);
647 679 if (err)
648 680 goto error;
649 681  
650   - version = &rc->params.rversion.version;
651   - if (version->len == 8 && !memcmp(version->str, "9P2000.u", 8))
652   - clnt->dotu = 1;
653   - else if (version->len == 6 && !memcmp(version->str, "9P2000", 6))
654   - clnt->dotu = 0;
655   - else {
656   - err = -EREMOTEIO;
657   - goto error;
658   - }
659   -
660   - n = rc->params.rversion.msize;
661   - if (n < clnt->msize)
662   - clnt->msize = n;
663   -
664   - kfree(tc);
665   - kfree(rc);
666 682 return clnt;
667 683  
668 684 error:
669   - kfree(tc);
670   - kfree(rc);
671 685 p9_client_destroy(clnt);
672 686 return ERR_PTR(err);
673 687 }