From d19a3a347a6f451dae54186f602a2d3785d8a872 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 22 Apr 2010 11:58:18 +0200 Subject: [PATCH] --- yaml --- r: 190331 b: refs/heads/master c: e1da0222753a2322d76c97fc02396fb83143c7ac h: refs/heads/master i: 190329: d8e90a6bb5efedb51b1350551804ff80a4bb1fd0 190327: 6f40a9ea55fd65756775a8c45dc8b7c3369a5b3b v: v3 --- [refs] | 2 +- trunk/fs/afs/internal.h | 2 ++ trunk/fs/afs/super.c | 1 + trunk/fs/afs/volume.c | 7 +++++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 7d383c38dfff..1bb3bc8856fe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0ed07ddb56d1348e5ce33f3b8de20d730351983a +refs/heads/master: e1da0222753a2322d76c97fc02396fb83143c7ac diff --git a/trunk/fs/afs/internal.h b/trunk/fs/afs/internal.h index c54dad4e6063..a10f2582844f 100644 --- a/trunk/fs/afs/internal.h +++ b/trunk/fs/afs/internal.h @@ -19,6 +19,7 @@ #include #include #include +#include #include "afs.h" #include "afs_vl.h" @@ -313,6 +314,7 @@ struct afs_volume { unsigned short rjservers; /* number of servers discarded due to -ENOMEDIUM */ struct afs_server *servers[8]; /* servers on which volume resides (ordered) */ struct rw_semaphore server_sem; /* lock for accessing current server */ + struct backing_dev_info bdi; }; /* diff --git a/trunk/fs/afs/super.c b/trunk/fs/afs/super.c index 14f6431598ad..e932e5a3a0c1 100644 --- a/trunk/fs/afs/super.c +++ b/trunk/fs/afs/super.c @@ -311,6 +311,7 @@ static int afs_fill_super(struct super_block *sb, void *data) sb->s_magic = AFS_FS_MAGIC; sb->s_op = &afs_super_ops; sb->s_fs_info = as; + sb->s_bdi = &as->volume->bdi; /* allocate the root inode and dentry */ fid.vid = as->volume->vid; diff --git a/trunk/fs/afs/volume.c b/trunk/fs/afs/volume.c index a353e69e2391..401eeb21869f 100644 --- a/trunk/fs/afs/volume.c +++ b/trunk/fs/afs/volume.c @@ -106,6 +106,10 @@ struct afs_volume *afs_volume_lookup(struct afs_mount_params *params) volume->cell = params->cell; volume->vid = vlocation->vldb.vid[params->type]; + ret = bdi_setup_and_register(&volume->bdi, "afs", BDI_CAP_MAP_COPY); + if (ret) + goto error_bdi; + init_rwsem(&volume->server_sem); /* look up all the applicable server records */ @@ -151,6 +155,8 @@ struct afs_volume *afs_volume_lookup(struct afs_mount_params *params) return ERR_PTR(ret); error_discard: + bdi_destroy(&volume->bdi); +error_bdi: up_write(¶ms->cell->vl_sem); for (loop = volume->nservers - 1; loop >= 0; loop--) @@ -200,6 +206,7 @@ void afs_put_volume(struct afs_volume *volume) for (loop = volume->nservers - 1; loop >= 0; loop--) afs_put_server(volume->servers[loop]); + bdi_destroy(&volume->bdi); kfree(volume); _leave(" [destroyed]");