summaryrefslogtreecommitdiffstats
path: root/fs/nfs/client.c
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2009-09-21 09:59:39 +0200
committerJens Axboe <jens.axboe@oracle.com>2009-09-21 15:40:33 +0200
commit48d0764998ad4ab7570afab8bb3bee0fbfa55b2a (patch)
tree7ad93edfbba609f7f7a730d66d47950630e203d3 /fs/nfs/client.c
parentwriteback: make balance_dirty_pages() gradually back more off (diff)
downloadlinux-48d0764998ad4ab7570afab8bb3bee0fbfa55b2a.tar.xz
linux-48d0764998ad4ab7570afab8bb3bee0fbfa55b2a.zip
nfs: initialize the backing_dev_info when creating the server
NFS may free the server structure without ever having used the bdi, so we either need to flag the bdi as being uninitialized or initialize it up front. This does the latter. This fixes a crash with mounting more than one NFS file system, should people ever need that kind of obscure NFS functionality. Tested-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'fs/nfs/client.c')
-rw-r--r--fs/nfs/client.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index e350bd6a2334..a7ce15d3c248 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -933,10 +933,6 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str
goto out_error;
nfs_server_set_fsinfo(server, &fsinfo);
- error = bdi_init(&server->backing_dev_info);
- if (error)
- goto out_error;
-
/* Get some general file system info */
if (server->namelen == 0) {
@@ -995,6 +991,12 @@ static struct nfs_server *nfs_alloc_server(void)
return NULL;
}
+ if (bdi_init(&server->backing_dev_info)) {
+ nfs_free_iostats(server->io_stats);
+ kfree(server);
+ return NULL;
+ }
+
return server;
}