On 2018/3/27 20:49, Chengguang Xu wrote: > When specifying trans_mod multiple times in a mount, > it may cause inaccurate refcount of trans module. Also, > in the error case of option parsing, we should put the > trans module if we have already got. > > Signed-off-by: Chengguang Xu <cgxu...@gmx.com> > --- > net/9p/client.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/net/9p/client.c b/net/9p/client.c > index b433aff..7ccfb4b 100644 > --- a/net/9p/client.c > +++ b/net/9p/client.c > @@ -190,7 +190,9 @@ static int parse_opts(char *opts, struct p9_client *clnt) > p9_debug(P9_DEBUG_ERROR, > "problem allocating copy of trans > arg\n"); > goto free_and_return; > - } > + } > + > + v9fs_put_trans(clnt->trans_mod);
I think this should return error if using multiple times in a mount. > clnt->trans_mod = v9fs_get_trans_by_name(s); > if (clnt->trans_mod == NULL) { > pr_info("Could not find request transport: > %s\n", > @@ -226,6 +228,7 @@ static int parse_opts(char *opts, struct p9_client *clnt) > } > > free_and_return: > + v9fs_put_trans(clnt->trans_mod); This looks good. > kfree(tmp_options); > return ret; > } >