diff options
| author | Jens Axboe <jens.axboe@oracle.com> | 2010-04-22 05:42:00 -0400 |
|---|---|---|
| committer | Jens Axboe <jens.axboe@oracle.com> | 2010-04-22 05:42:00 -0400 |
| commit | 0ed07ddb56d1348e5ce33f3b8de20d730351983a (patch) | |
| tree | 2a1487252e9ecd6fe5b7ff87d9b035f040ab8ff1 | |
| parent | c3c532061e46156e8aab1268f38d66cfb63aeb2d (diff) | |
9p: add bdi backing to mount session
This ensures that dirty data gets flushed properly.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
| -rw-r--r-- | fs/9p/v9fs.c | 10 | ||||
| -rw-r--r-- | fs/9p/v9fs.h | 2 | ||||
| -rw-r--r-- | fs/9p/vfs_super.c | 1 |
3 files changed, 13 insertions, 0 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 5c5bc8480070..f8b86e92cd66 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c | |||
| @@ -238,6 +238,13 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses, | |||
| 238 | return ERR_PTR(-ENOMEM); | 238 | return ERR_PTR(-ENOMEM); |
| 239 | } | 239 | } |
| 240 | 240 | ||
| 241 | rc = bdi_setup_and_register(&v9ses->bdi, "9p", BDI_CAP_MAP_COPY); | ||
| 242 | if (rc) { | ||
| 243 | __putname(v9ses->aname); | ||
| 244 | __putname(v9ses->uname); | ||
| 245 | return ERR_PTR(rc); | ||
| 246 | } | ||
| 247 | |||
| 241 | spin_lock(&v9fs_sessionlist_lock); | 248 | spin_lock(&v9fs_sessionlist_lock); |
| 242 | list_add(&v9ses->slist, &v9fs_sessionlist); | 249 | list_add(&v9ses->slist, &v9fs_sessionlist); |
| 243 | spin_unlock(&v9fs_sessionlist_lock); | 250 | spin_unlock(&v9fs_sessionlist_lock); |
| @@ -301,6 +308,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses, | |||
| 301 | return fid; | 308 | return fid; |
| 302 | 309 | ||
| 303 | error: | 310 | error: |
| 311 | bdi_destroy(&v9ses->bdi); | ||
| 304 | return ERR_PTR(retval); | 312 | return ERR_PTR(retval); |
| 305 | } | 313 | } |
| 306 | 314 | ||
| @@ -326,6 +334,8 @@ void v9fs_session_close(struct v9fs_session_info *v9ses) | |||
| 326 | __putname(v9ses->uname); | 334 | __putname(v9ses->uname); |
| 327 | __putname(v9ses->aname); | 335 | __putname(v9ses->aname); |
| 328 | 336 | ||
| 337 | bdi_destroy(&v9ses->bdi); | ||
| 338 | |||
| 329 | spin_lock(&v9fs_sessionlist_lock); | 339 | spin_lock(&v9fs_sessionlist_lock); |
| 330 | list_del(&v9ses->slist); | 340 | list_del(&v9ses->slist); |
| 331 | spin_unlock(&v9fs_sessionlist_lock); | 341 | spin_unlock(&v9fs_sessionlist_lock); |
diff --git a/fs/9p/v9fs.h b/fs/9p/v9fs.h index a0a8d3dd1361..bec4d0bcb458 100644 --- a/fs/9p/v9fs.h +++ b/fs/9p/v9fs.h | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | * Boston, MA 02111-1301 USA | 20 | * Boston, MA 02111-1301 USA |
| 21 | * | 21 | * |
| 22 | */ | 22 | */ |
| 23 | #include <linux/backing-dev.h> | ||
| 23 | 24 | ||
| 24 | /** | 25 | /** |
| 25 | * enum p9_session_flags - option flags for each 9P session | 26 | * enum p9_session_flags - option flags for each 9P session |
| @@ -102,6 +103,7 @@ struct v9fs_session_info { | |||
| 102 | u32 uid; /* if ACCESS_SINGLE, the uid that has access */ | 103 | u32 uid; /* if ACCESS_SINGLE, the uid that has access */ |
| 103 | struct p9_client *clnt; /* 9p client */ | 104 | struct p9_client *clnt; /* 9p client */ |
| 104 | struct list_head slist; /* list of sessions registered with v9fs */ | 105 | struct list_head slist; /* list of sessions registered with v9fs */ |
| 106 | struct backing_dev_info bdi; | ||
| 105 | }; | 107 | }; |
| 106 | 108 | ||
| 107 | struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, | 109 | struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, |
diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c index 491108bd6e0d..806da5d3b3a0 100644 --- a/fs/9p/vfs_super.c +++ b/fs/9p/vfs_super.c | |||
| @@ -77,6 +77,7 @@ v9fs_fill_super(struct super_block *sb, struct v9fs_session_info *v9ses, | |||
| 77 | sb->s_blocksize = 1 << sb->s_blocksize_bits; | 77 | sb->s_blocksize = 1 << sb->s_blocksize_bits; |
| 78 | sb->s_magic = V9FS_MAGIC; | 78 | sb->s_magic = V9FS_MAGIC; |
| 79 | sb->s_op = &v9fs_super_ops; | 79 | sb->s_op = &v9fs_super_ops; |
| 80 | sb->s_bdi = &v9ses->bdi; | ||
| 80 | 81 | ||
| 81 | sb->s_flags = flags | MS_ACTIVE | MS_SYNCHRONOUS | MS_DIRSYNC | | 82 | sb->s_flags = flags | MS_ACTIVE | MS_SYNCHRONOUS | MS_DIRSYNC | |
| 82 | MS_NOATIME; | 83 | MS_NOATIME; |
