Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdb7eced authored by Bryan Schumaker's avatar Bryan Schumaker Committed by Trond Myklebust
Browse files

NFS: Create a free_client rpc_op



NFS v4 needs a way to shut down callbacks and sessions, but v2 and v3
don't.

Signed-off-by: default avatarBryan Schumaker <bjschuma@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 57ec14c5
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -242,6 +242,12 @@ static void nfs4_shutdown_client(struct nfs_client *clp)
	kfree(clp->cl_implid);
}

void nfs4_free_client(struct nfs_client *clp)
{
	nfs4_shutdown_client(clp);
	nfs_free_client(clp);
}

/* idr_remove_all is not needed as all id's are removed by nfs_put_client */
void nfs_cleanup_cb_ident_idr(struct net *net)
{
@@ -272,10 +278,6 @@ static void nfs4_destroy_server(struct nfs_server *server)
}

#else
static void nfs4_shutdown_client(struct nfs_client *clp)
{
}

void nfs_cleanup_cb_ident_idr(struct net *net)
{
}
@@ -293,12 +295,10 @@ static void pnfs_init_server(struct nfs_server *server)
/*
 * Destroy a shared client record
 */
static void nfs_free_client(struct nfs_client *clp)
void nfs_free_client(struct nfs_client *clp)
{
	dprintk("--> nfs_free_client(%u)\n", clp->rpc_ops->version);

	nfs4_shutdown_client(clp);

	nfs_fscache_release_client_cookie(clp);

	/* -EIO all pending I/O */
@@ -335,7 +335,7 @@ void nfs_put_client(struct nfs_client *clp)

		BUG_ON(!list_empty(&clp->cl_superblocks));

		nfs_free_client(clp);
		clp->rpc_ops->free_client(clp);
	}
}
EXPORT_SYMBOL_GPL(nfs_put_client);
@@ -574,7 +574,7 @@ nfs_get_client(const struct nfs_client_initdata *cl_init,
		if (clp) {
			spin_unlock(&nn->nfs_client_lock);
			if (new)
				nfs_free_client(new);
				new->rpc_ops->free_client(new);
			return nfs_found_client(cl_init, clp);
		}
		if (new) {
+1 −0
Original line number Diff line number Diff line
@@ -151,6 +151,7 @@ extern void nfs_clients_init(struct net *net);

extern void nfs_cleanup_cb_ident_idr(struct net *);
extern void nfs_put_client(struct nfs_client *);
extern void nfs_free_client(struct nfs_client *);
extern struct nfs_client *nfs4_find_client_ident(struct net *, int);
extern struct nfs_client *
nfs4_find_client_sessionid(struct net *, const struct sockaddr *,
+1 −0
Original line number Diff line number Diff line
@@ -935,4 +935,5 @@ const struct nfs_rpc_ops nfs_v3_clientops = {
	.have_delegation = nfs3_have_delegation,
	.return_delegation = nfs3_return_delegation,
	.init_client	= nfs_init_client,
	.free_client	= nfs_free_client,
};
+2 −0
Original line number Diff line number Diff line
@@ -301,6 +301,8 @@ extern const u32 nfs4_pathconf_bitmap[2];
extern const u32 nfs4_fsinfo_bitmap[3];
extern const u32 nfs4_fs_locations_bitmap[2];

void nfs4_free_client(struct nfs_client *);

/* nfs4renewd.c */
extern void nfs4_schedule_state_renewal(struct nfs_client *);
extern void nfs4_renewd_prepare_shutdown(struct nfs_server *);
+1 −0
Original line number Diff line number Diff line
@@ -6807,6 +6807,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
	.have_delegation = nfs4_have_delegation,
	.return_delegation = nfs4_inode_return_delegation,
	.init_client	= nfs4_init_client,
	.free_client	= nfs4_free_client,
};

static const struct xattr_handler nfs4_xattr_nfs4_acl_handler = {
Loading