Re: [PATCH v2 07/33] NFS: Enable slot table helpers for NFSv4.0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2013-08-09 at 12:48 -0400, Chuck Lever wrote:
> I'd like to re-use NFSv4.1's slot table machinery for NFSv4.0
> transport blocking.  Re-organize some of nfs4session.c so the slot
> table code is built even when NFS_V4_1 is disabled.
> 
> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
> ---
>  fs/nfs/Makefile      |    4 ++--
>  fs/nfs/nfs4session.c |   29 +++++++++++++++++++++--------
>  fs/nfs/nfs4session.h |   28 +++++++++++++---------------
>  fs/nfs/nfs4state.c   |    9 ---------
>  4 files changed, 36 insertions(+), 34 deletions(-)
> 
> diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
> index e0bb048..2839bfe 100644
> --- a/fs/nfs/Makefile
> +++ b/fs/nfs/Makefile
> @@ -21,10 +21,10 @@ nfsv3-$(CONFIG_NFS_V3_ACL) += nfs3acl.o
>  obj-$(CONFIG_NFS_V4) += nfsv4.o
>  nfsv4-y := nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o nfs4super.o nfs4file.o \
>  	  delegation.o idmap.o callback.o callback_xdr.o callback_proc.o \
> -	  nfs4namespace.o nfs4getroot.o nfs4client.o dns_resolve.o
> +	  nfs4namespace.o nfs4getroot.o nfs4client.o dns_resolve.o nfs4session.o
>  nfsv4-$(CONFIG_NFS_USE_LEGACY_DNS) += cache_lib.o
>  nfsv4-$(CONFIG_SYSCTL)	+= nfs4sysctl.o
> -nfsv4-$(CONFIG_NFS_V4_1)	+= nfs4session.o pnfs.o pnfs_dev.o
> +nfsv4-$(CONFIG_NFS_V4_1)	+= pnfs.o pnfs_dev.o
>  
>  obj-$(CONFIG_PNFS_FILE_LAYOUT) += nfs_layout_nfsv41_files.o
>  nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o
> diff --git a/fs/nfs/nfs4session.c b/fs/nfs/nfs4session.c
> index 0161ad2..746675b 100644
> --- a/fs/nfs/nfs4session.c
> +++ b/fs/nfs/nfs4session.c
> @@ -44,6 +44,17 @@ static void nfs4_shrink_slot_table(struct nfs4_slot_table  *tbl, u32 newsize)
>  	}
>  }
>  
> +/**
> + * nfs4_slot_tbl_drain_complete - wake waiters when drain is complete
> + * @tbl - controlling slot table
> + *
> + */
> +void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl)
> +{
> +	if (nfs4_slot_tbl_draining(tbl))
> +		complete(&tbl->complete);
> +}
> +
>  /*
>   * nfs4_free_slot - free a slot and efficiently update slot table.
>   *
> @@ -212,13 +223,6 @@ out:
>  	return ret;
>  }
>  
> -/* Destroy the slot table */
> -static void nfs4_destroy_slot_tables(struct nfs4_session *session)
> -{
> -	nfs4_shrink_slot_table(&session->fc_slot_table, 0);
> -	nfs4_shrink_slot_table(&session->bc_slot_table, 0);
> -}
> -
>  static bool nfs41_assign_slot(struct rpc_task *task, void *pslot)
>  {
>  	struct nfs4_sequence_args *args = task->tk_msg.rpc_argp;
> @@ -383,6 +387,15 @@ void nfs41_update_target_slotid(struct nfs4_slot_table *tbl,
>  	spin_unlock(&tbl->slot_tbl_lock);
>  }
>  
> +#if defined(CONFIG_NFS_V4_1)
> +
> +/* Destroy the slot table */
> +static void nfs4_destroy_slot_tables(struct nfs4_session *session)
> +{
> +	nfs4_shrink_slot_table(&session->fc_slot_table, 0);
> +	nfs4_shrink_slot_table(&session->bc_slot_table, 0);
> +}
> +
>  /*
>   * Initialize or reset the forechannel and backchannel tables
>   */
> @@ -513,4 +526,4 @@ int nfs4_init_ds_session(struct nfs_client *clp, unsigned long lease_time)
>  }
>  EXPORT_SYMBOL_GPL(nfs4_init_ds_session);
>  
> -
> +#endif	/* defined(CONFIG_NFS_V4_1) */
> diff --git a/fs/nfs/nfs4session.h b/fs/nfs/nfs4session.h
> index 3a153d8..23d26b4 100644
> --- a/fs/nfs/nfs4session.h
> +++ b/fs/nfs/nfs4session.h
> @@ -72,15 +72,24 @@ enum nfs4_session_state {
>  	NFS4_SESSION_INITING,
>  };
>  
> -#if defined(CONFIG_NFS_V4_1)
>  extern struct nfs4_slot *nfs4_alloc_slot(struct nfs4_slot_table *tbl);
>  extern void nfs4_free_slot(struct nfs4_slot_table *tbl, struct nfs4_slot *slot);
> -
> -extern void nfs41_set_target_slotid(struct nfs4_slot_table *tbl,
> -		u32 target_highest_slotid);
> +extern void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl);
>  extern void nfs41_update_target_slotid(struct nfs4_slot_table *tbl,
>  		struct nfs4_slot *slot,
>  		struct nfs4_sequence_res *res);
> +bool nfs41_wake_and_assign_slot(struct nfs4_slot_table *tbl,
> +		struct nfs4_slot *slot);
> +void nfs41_wake_slot_table(struct nfs4_slot_table *tbl);
> +
> +static inline bool nfs4_slot_tbl_draining(struct nfs4_slot_table *tbl)
> +{
> +	return !!test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state);
> +}
> +
> +#if defined(CONFIG_NFS_V4_1)
> +extern void nfs41_set_target_slotid(struct nfs4_slot_table *tbl,
> +		u32 target_highest_slotid);
>  
>  extern int nfs4_setup_session_slot_tables(struct nfs4_session *ses);
>  
> @@ -89,17 +98,6 @@ extern void nfs4_destroy_session(struct nfs4_session *session);
>  extern int nfs4_init_session(struct nfs_client *clp);
>  extern int nfs4_init_ds_session(struct nfs_client *, unsigned long);
>  
> -extern void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl);
> -
> -static inline bool nfs4_slot_tbl_draining(struct nfs4_slot_table *tbl)
> -{
> -	return !!test_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state);
> -}
> -
> -bool nfs41_wake_and_assign_slot(struct nfs4_slot_table *tbl,
> -		struct nfs4_slot *slot);
> -void nfs41_wake_slot_table(struct nfs4_slot_table *tbl);
> -
>  /*
>   * Determine if sessions are in use.
>   */
> diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
> index 6818964..8826df3 100644
> --- a/fs/nfs/nfs4state.c
> +++ b/fs/nfs/nfs4state.c
> @@ -260,15 +260,6 @@ static void nfs4_end_drain_session(struct nfs_client *clp)
>  	}
>  }
>  
> -/*
> - * Signal state manager thread if session fore channel is drained
> - */
> -void nfs4_slot_tbl_drain_complete(struct nfs4_slot_table *tbl)
> -{
> -	if (nfs4_slot_tbl_draining(tbl))
> -		complete(&tbl->complete);
> -}
> -
>  static int nfs4_drain_slot_tbl(struct nfs4_slot_table *tbl)
>  {
>  	set_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

when compiled without CONFIG_NFS_V4_1, sparse complains:

[trondmy@leira linux-nfs]$ make O=../object.x86_64 W=1 C=2 fs/nfs/nfs4session.o
make[2]: Nothing to be done for `all'.
make[2]: Nothing to be done for `relocs'.
  Using /home/trondmy/devel/kernel/linux-nfs as source for kernel
  GEN     /home/trondmy/devel/kernel/object.x86_64/Makefile
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    /home/trondmy/devel/kernel/linux-nfs/scripts/checksyscalls.sh
  CHECK   /home/trondmy/devel/kernel/linux-nfs/scripts/mod/empty.c
  CHECK   /home/trondmy/devel/kernel/linux-nfs/fs/nfs/nfs4session.c
/home/trondmy/devel/kernel/linux-nfs/fs/nfs/nfs4session.c:304:6: warning: symbol 'nfs41_set_target_slotid' was not declared. Should it be static?
/home/trondmy/devel/kernel/linux-nfs/include/linux/err.h:34:16: warning: dereference of noderef expression
/home/trondmy/devel/kernel/linux-nfs/include/linux/err.h:34:16: warning: dereference of noderef expression
/home/trondmy/devel/kernel/linux-nfs/include/linux/err.h:34:16: warning: dereference of noderef expression
/home/trondmy/devel/kernel/linux-nfs/include/linux/err.h:34:16: warning: dereference of noderef expression
  CC [M]  fs/nfs/nfs4session.o
/home/trondmy/devel/kernel/linux-nfs/fs/nfs/nfs4session.c:304:6: warning: no previous prototype for ‘nfs41_set_target_slotid’ [-Wmissing-prototypes]
 void nfs41_set_target_slotid(struct nfs4_slot_table *tbl,
      ^
/home/trondmy/devel/kernel/linux-nfs/fs/nfs/nfs4session.c:200:12: warning: ‘nfs4_realloc_slot_table’ defined but not used [-Wunused-function]
 static int nfs4_realloc_slot_table(struct nfs4_slot_table *tbl,


-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com
��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux