--- x/fs/9p/v9fs.c +++ y/fs/9p/v9fs.c @@ -408,6 +408,7 @@ struct p9_fid *v9fs_session_init(struct v9ses->clnt = p9_client_create(dev_name, data); if (IS_ERR(v9ses->clnt)) { rc = PTR_ERR(v9ses->clnt); + v9ses->clnt = NULL; p9_debug(P9_DEBUG_ERROR, "problem initializing 9p client\n"); goto err_names; } @@ -486,6 +487,7 @@ err_clnt: kfree(v9ses->cachetag); #endif p9_client_destroy(v9ses->clnt); + v9ses->clnt = NULL; err_names: kfree(v9ses->uname); kfree(v9ses->aname); @@ -527,6 +529,8 @@ void v9fs_session_close(struct v9fs_sess void v9fs_session_cancel(struct v9fs_session_info *v9ses) { p9_debug(P9_DEBUG_ERROR, "cancel session %p\n", v9ses); + if (!v9ses->clnt) + return; p9_client_disconnect(v9ses->clnt); }