diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/9p/v9fs.c | 13 | ||||
| -rw-r--r-- | fs/9p/v9fs.h | 1 | ||||
| -rw-r--r-- | fs/9p/vfs_super.c | 3 |
3 files changed, 16 insertions, 1 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 2f814cf0c731..0b78ae8157b9 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c | |||
| @@ -342,6 +342,19 @@ void v9fs_session_cancel(struct v9fs_session_info *v9ses) { | |||
| 342 | p9_client_disconnect(v9ses->clnt); | 342 | p9_client_disconnect(v9ses->clnt); |
| 343 | } | 343 | } |
| 344 | 344 | ||
| 345 | /** | ||
| 346 | * v9fs_session_begin_cancel - Begin terminate of a session | ||
| 347 | * @v9ses: session to terminate | ||
| 348 | * | ||
| 349 | * After this call we don't allow any request other than clunk. | ||
| 350 | */ | ||
| 351 | |||
| 352 | void v9fs_session_begin_cancel(struct v9fs_session_info *v9ses) | ||
| 353 | { | ||
| 354 | P9_DPRINTK(P9_DEBUG_ERROR, "begin cancel session %p\n", v9ses); | ||
| 355 | p9_client_begin_disconnect(v9ses->clnt); | ||
| 356 | } | ||
| 357 | |||
| 345 | extern int v9fs_error_init(void); | 358 | extern int v9fs_error_init(void); |
| 346 | 359 | ||
| 347 | static struct kobject *v9fs_kobj; | 360 | static struct kobject *v9fs_kobj; |
diff --git a/fs/9p/v9fs.h b/fs/9p/v9fs.h index 6b801d1ddf4b..a0a8d3dd1361 100644 --- a/fs/9p/v9fs.h +++ b/fs/9p/v9fs.h | |||
| @@ -108,6 +108,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, | |||
| 108 | char *); | 108 | char *); |
| 109 | void v9fs_session_close(struct v9fs_session_info *v9ses); | 109 | void v9fs_session_close(struct v9fs_session_info *v9ses); |
| 110 | void v9fs_session_cancel(struct v9fs_session_info *v9ses); | 110 | void v9fs_session_cancel(struct v9fs_session_info *v9ses); |
| 111 | void v9fs_session_begin_cancel(struct v9fs_session_info *v9ses); | ||
| 111 | 112 | ||
| 112 | #define V9FS_MAGIC 0x01021997 | 113 | #define V9FS_MAGIC 0x01021997 |
| 113 | 114 | ||
diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c index 69357c0d9899..d1a3c809a291 100644 --- a/fs/9p/vfs_super.c +++ b/fs/9p/vfs_super.c | |||
| @@ -193,6 +193,7 @@ static void v9fs_kill_super(struct super_block *s) | |||
| 193 | 193 | ||
| 194 | kill_anon_super(s); | 194 | kill_anon_super(s); |
| 195 | 195 | ||
| 196 | v9fs_session_cancel(v9ses); | ||
| 196 | v9fs_session_close(v9ses); | 197 | v9fs_session_close(v9ses); |
| 197 | kfree(v9ses); | 198 | kfree(v9ses); |
| 198 | s->s_fs_info = NULL; | 199 | s->s_fs_info = NULL; |
| @@ -205,7 +206,7 @@ v9fs_umount_begin(struct super_block *sb) | |||
| 205 | struct v9fs_session_info *v9ses; | 206 | struct v9fs_session_info *v9ses; |
| 206 | 207 | ||
| 207 | v9ses = sb->s_fs_info; | 208 | v9ses = sb->s_fs_info; |
| 208 | v9fs_session_cancel(v9ses); | 209 | v9fs_session_begin_cancel(v9ses); |
| 209 | } | 210 | } |
| 210 | 211 | ||
| 211 | static const struct super_operations v9fs_super_ops = { | 212 | static const struct super_operations v9fs_super_ops = { |
