mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	NFS: Enable slot table helpers for NFSv4.0
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@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
		
							parent
							
								
									220e09ccd3
								
							
						
					
					
						commit
						9d33059c1b
					
				
					 4 changed files with 37 additions and 35 deletions
				
			
		| 
						 | 
				
			
			@ -23,11 +23,11 @@ obj-$(CONFIG_NFS_V4) += nfsv4.o
 | 
			
		|||
CFLAGS_nfs4trace.o += -I$(src)
 | 
			
		||||
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 \
 | 
			
		||||
	  nfs4trace.o
 | 
			
		||||
	  nfs4namespace.o nfs4getroot.o nfs4client.o nfs4session.o \
 | 
			
		||||
	  dns_resolve.o nfs4trace.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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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) */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue