--- 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); } --- x/fs/9p/vfs_super.c +++ y/fs/9p/vfs_super.c @@ -197,6 +197,7 @@ free_session: return ERR_PTR(retval); release_sb: + goto clunk_fid; /* * we will do the session_close and root dentry release * in the below call. But we need to clunk fid, because we haven't