From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Howells Subject: [PATCH 17/30] NFS: Start rpciod in server common management [try #11] Date: Thu, 27 Jul 2006 21:53:05 +0100 Message-ID: <20060727205305.8443.6740.stgit@warthog.cambridge.redhat.com> References: <20060727205222.8443.29381.stgit@warthog.cambridge.redhat.com> Reply-To: Linux filesystem caching discussion list Content-Type: text/plain; charset=utf-8; format=fixed Content-Transfer-Encoding: quoted-printable Cc: linux-fsdevel@vger.kernel.org, linux-cachefs@redhat.com, nfsv4@linux-nfs.org, linux-kernel@vger.kernel.org Return-path: To: torvalds@osdl.org, akpm@osdl.org, steved@redhat.com, trond.myklebust@fys.uio.no In-Reply-To: <20060727205222.8443.29381.stgit@warthog.cambridge.redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-cachefs-bounces@redhat.com Errors-To: linux-cachefs-bounces@redhat.com List-Id: linux-fsdevel.vger.kernel.org Start rpciod in the server common (nfs_client struct) management code rat= her than in the superblock management code. This means we only need to "star= t" it once per server instead of once per superblock. Signed-Off-By: David Howells Signed-off-by: Trond Myklebust --- fs/nfs/super.c | 31 ++++++------------------------- 1 files changed, 6 insertions(+), 25 deletions(-) diff --git a/fs/nfs/super.c b/fs/nfs/super.c index f3f229d..321f0d7 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -717,18 +717,15 @@ static int nfs_clone_generic_sb(struct n if (server->hostname =3D=3D NULL) goto free_server; memcpy(server->hostname, hostname, len); - error =3D rpciod_up(); - if (error !=3D 0) - goto free_hostname; =20 sb =3D fill_sb(server, data); if (IS_ERR(sb)) { error =3D PTR_ERR(sb); - goto kill_rpciod; + goto free_hostname; } =20 if (sb->s_root) - goto out_rpciod_down; + goto out_share; =20 server =3D fill_server(sb, data); if (IS_ERR(server)) { @@ -740,14 +737,11 @@ out_deactivate: up_write(&sb->s_umount); deactivate_super(sb); return error; -out_rpciod_down: - rpciod_down(); +out_share: kfree(server->hostname); nfs_put_client(server->nfs_client); kfree(server); return simple_set_mnt(mnt, sb); -kill_rpciod: - rpciod_down(); free_hostname: kfree(server->hostname); free_server: @@ -934,22 +928,14 @@ #endif /* CONFIG_NFS_V3 */ goto out_err; } =20 - /* Fire up rpciod if not yet running */ - error =3D rpciod_up(); - if (error < 0) { - dprintk("%s: couldn't start rpciod! Error =3D %d\n", - __FUNCTION__, error); - goto out_err; - } - s =3D sget(fs_type, nfs_compare_super, nfs_set_super, server); if (IS_ERR(s)) { error =3D PTR_ERR(s); - goto out_err_rpciod; + goto out_err; } =20 if (s->s_root) - goto out_rpciod_down; + goto out_share; =20 s->s_flags =3D flags; =20 @@ -962,13 +948,10 @@ #endif /* CONFIG_NFS_V3 */ s->s_flags |=3D MS_ACTIVE; return simple_set_mnt(mnt, s); =20 -out_rpciod_down: - rpciod_down(); +out_share: kfree(server); return simple_set_mnt(mnt, s); =20 -out_err_rpciod: - rpciod_down(); out_err: kfree(server); out_err_noserver: @@ -989,8 +972,6 @@ static void nfs_kill_super(struct super_ if (!(server->flags & NFS_MOUNT_NONLM)) lockd_down(); /* release rpc.lockd */ =20 - rpciod_down(); /* release rpciod */ - nfs_free_iostats(server->io_stats); kfree(server->hostname); nfs_put_client(server->nfs_client);