From 1905abd02753ef6b8c1e30b10b270213f1b214b7 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 10 May 2012 14:04:23 -0400 Subject: [PATCH] session: simplify slot table error handling due to the slot table's use of CRITICAL_SECTION and CONDITION_VARIABLE, the slot table no longer returns errors for following functions: nfs41_session_bump_seq() nfs41_session_free_slot() nfs41_session_get_slot() nfs41_session_sequence() Signed-off-by: Casey Bodley --- daemon/lookup.c | 4 +- daemon/name_cache.c | 4 +- daemon/nfs41.h | 8 +-- daemon/nfs41_compound.c | 14 ++--- daemon/nfs41_ops.c | 128 ++++++++++------------------------------ daemon/nfs41_session.c | 22 ++----- 6 files changed, 48 insertions(+), 132 deletions(-) diff --git a/daemon/lookup.c b/daemon/lookup.c index e1e685a..ea0a9d2 100644 --- a/daemon/lookup.c +++ b/daemon/lookup.c @@ -120,9 +120,7 @@ static int lookup_rpc( compound_init(&compound, argops, resops, "lookup"); compound_add_op(&compound, OP_SEQUENCE, &args->sequence, &res->sequence); - status = nfs41_session_sequence(&args->sequence, session, 0); - if (status) - goto out; + nfs41_session_sequence(&args->sequence, session, 0); if (dir == &res->root) { compound_add_op(&compound, OP_PUTROOTFH, NULL, &res->putfh); diff --git a/daemon/name_cache.c b/daemon/name_cache.c index f70ce04..eaa0f36 100644 --- a/daemon/name_cache.c +++ b/daemon/name_cache.c @@ -1301,9 +1301,7 @@ static int rpc_array_putfh( compound_init(&compound, argops, resops, "array_putfh"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); for (i = 0; i < count; i++){ compound_add_op(&compound, OP_PUTFH, &putfh_args[i], &putfh_res[i]); diff --git a/daemon/nfs41.h b/daemon/nfs41.h index c802511..3e5052b 100644 --- a/daemon/nfs41.h +++ b/daemon/nfs41.h @@ -345,22 +345,22 @@ int nfs41_session_set_lease( void nfs41_session_free( IN nfs41_session *session); -int nfs41_session_bump_seq( +void nfs41_session_bump_seq( IN nfs41_session *session, IN uint32_t slotid); -int nfs41_session_free_slot( +void nfs41_session_free_slot( IN nfs41_session *session, IN uint32_t slotid); -int nfs41_session_get_slot( +void nfs41_session_get_slot( IN nfs41_session *session, OUT uint32_t *slot, OUT uint32_t *seq, OUT uint32_t *highest); struct __nfs41_sequence_args; -int nfs41_session_sequence( +void nfs41_session_sequence( struct __nfs41_sequence_args *args, nfs41_session *session, bool_t cachethis); diff --git a/daemon/nfs41_compound.c b/daemon/nfs41_compound.c index 62537a0..20b6a36 100644 --- a/daemon/nfs41_compound.c +++ b/daemon/nfs41_compound.c @@ -159,10 +159,10 @@ retry: (nfs41_sequence_res *)compound->res.resarray[0].res; if (seq->sr_status == NFS4_OK) { // returned slotid must be the same we sent - status = NFS4ERR_IO; if (seq->sr_resok4.sr_slotid != args->sa_slotid) { eprintf("[session] sr_slotid=%d != sa_slotid=%d\n", seq->sr_resok4.sr_slotid, args->sa_slotid); + status = NFS4ERR_IO; goto out_free_slot; } // returned sessionid must be the same we sent @@ -173,14 +173,13 @@ retry: seq->sr_resok4.sr_sessionid, NFS4_SESSIONID_SIZE); print_hexbuf(1, (unsigned char *)"sa_sessionid", args->sa_sessionid, NFS4_SESSIONID_SIZE); + status = NFS4ERR_IO; goto out_free_slot; } if (seq->sr_resok4.sr_status_flags) print_sr_status_flags(1, seq->sr_resok4.sr_status_flags); - status = nfs41_session_bump_seq(session, args->sa_slotid); - if (status) - goto out_free_slot; + nfs41_session_bump_seq(session, args->sa_slotid); /* check sequence status flags for state revocation */ if (try_recovery && seq->sr_resok4.sr_status_flags) @@ -444,11 +443,8 @@ out: return status; do_retry: - if (compound->res.resarray[0].op == OP_SEQUENCE) { - status = nfs41_session_get_slot(session, &args->sa_slotid, + if (compound->res.resarray[0].op == OP_SEQUENCE) + nfs41_session_get_slot(session, &args->sa_slotid, &args->sa_sequenceid, &args->sa_highest_slotid); - if (status) - goto out; - } goto retry; } diff --git a/daemon/nfs41_ops.c b/daemon/nfs41_ops.c index fce831b..bcca070 100644 --- a/daemon/nfs41_ops.c +++ b/daemon/nfs41_ops.c @@ -279,9 +279,7 @@ enum nfsstat4 nfs41_reclaim_complete( compound_init(&compound, argops, resops, "reclaim_complete"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_RECLAIM_COMPLETE, NULL, &reclaim_res); @@ -434,9 +432,7 @@ int nfs41_open( compound_init(&compound, argops, resops, "open"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); if (current_fh_is_dir) { /* CURRENT_FH: directory */ @@ -563,9 +559,7 @@ int nfs41_create( compound_init(&compound, argops, resops, "create"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = parent; @@ -655,9 +649,7 @@ int nfs41_close( compound_init(&compound, argops, resops, "close"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -723,9 +715,7 @@ int nfs41_write( stateid->stateid.seqid == 0 ? "ds write" : "write"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -806,9 +796,7 @@ int nfs41_read( stateid->stateid.seqid == 0 ? "ds read" : "read"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -870,9 +858,7 @@ int nfs41_commit( do_getattr ? "commit" : "ds commit"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -940,9 +926,7 @@ int nfs41_lock( compound_init(&compound, argops, resops, "lock"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1000,9 +984,7 @@ int nfs41_unlock( compound_init(&compound, argops, resops, "unlock"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1048,9 +1030,7 @@ int nfs41_readdir( compound_init(&compound, argops, resops, "readdir"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1100,9 +1080,7 @@ int nfs41_getattr( compound_init(&compound, argops, resops, "getattr"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); if (file) { compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); @@ -1158,9 +1136,7 @@ int nfs41_superblock_getattr( compound_init(&compound, argops, resops, "getfsattr"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1227,9 +1203,7 @@ int nfs41_remove( compound_init(&compound, argops, resops, "remove"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = parent; @@ -1301,9 +1275,7 @@ int nfs41_rename( compound_init(&compound, argops, resops, "rename"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); compound_add_op(&compound, OP_PUTFH, &src_putfh_args, &src_putfh_res); src_putfh_args.file = src_dir; @@ -1399,9 +1371,7 @@ int nfs41_setattr( compound_init(&compound, argops, resops, "setattr"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1467,9 +1437,7 @@ int nfs41_link( compound_init(&compound, argops, resops, "link"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 1); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 1); /* PUTFH(src) */ compound_add_op(&compound, OP_PUTFH, &putfh_args[0], &putfh_res[0]); @@ -1560,9 +1528,7 @@ int nfs41_readlink( compound_init(&compound, argops, resops, "readlink"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1606,9 +1572,7 @@ int nfs41_access( compound_init(&compound, argops, resops, "access"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1645,9 +1609,7 @@ int nfs41_send_sequence( compound_init(&compound, argops, resops, "sequence"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); status = compound_encode_send_decode(session, &compound, TRUE); if (status) @@ -1681,9 +1643,7 @@ enum nfsstat4 nfs41_want_delegation( compound_init(&compound, argops, resops, "want_delegation"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1717,9 +1677,7 @@ int nfs41_delegpurge( compound_init(&compound, argops, resops, "delegpurge"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_DELEGPURGE, NULL, &dp_res); @@ -1752,9 +1710,7 @@ int nfs41_delegreturn( compound_init(&compound, argops, resops, "delegreturn"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -1802,9 +1758,7 @@ enum nfsstat4 nfs41_fs_locations( compound_init(&compound, argops, resops, "fs_locations"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = parent; @@ -1848,9 +1802,7 @@ int nfs41_secinfo( compound_init(&compound, argops, resops, "secinfo"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); if (file == NULL) compound_add_op(&compound, OP_PUTROOTFH, NULL, &putfh_res); @@ -1892,9 +1844,7 @@ int nfs41_secinfo_noname( compound_init(&compound, argops, resops, "secinfo_no_name"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); if (file == NULL) compound_add_op(&compound, OP_PUTROOTFH, NULL, &putfh_res); @@ -1933,9 +1883,7 @@ enum nfsstat4 nfs41_free_stateid( compound_init(&compound, argops, resops, "free_stateid"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_FREE_STATEID, &freestateid_args, &freestateid_res); freestateid_args.stateid = stateid; @@ -1967,9 +1915,7 @@ enum nfsstat4 nfs41_test_stateid( compound_init(&compound, argops, resops, "test_stateid"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_TEST_STATEID, &teststateid_args, &teststateid_res); teststateid_args.stateids = stateid_array; @@ -2012,9 +1958,7 @@ enum nfsstat4 pnfs_rpc_layoutget( compound_init(&compound, argops, resops, "layoutget"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -2081,9 +2025,7 @@ enum nfsstat4 pnfs_rpc_layoutcommit( compound_init(&compound, argops, resops, "layoutcommit"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -2140,9 +2082,7 @@ enum nfsstat4 pnfs_rpc_layoutreturn( compound_init(&compound, argops, resops, "layoutreturn"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; @@ -2183,9 +2123,7 @@ enum nfsstat4 pnfs_rpc_getdeviceinfo( compound_init(&compound, argops, resops, "get_deviceinfo"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_GETDEVICEINFO, &getdeviceinfo_args, &getdeviceinfo_res); @@ -2225,9 +2163,7 @@ enum nfsstat4 nfs41_rpc_openattr( compound_init(&compound, argops, resops, "openattr"); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); - status = nfs41_session_sequence(&sequence_args, session, 0); - if (status) - goto out; + nfs41_session_sequence(&sequence_args, session, 0); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); putfh_args.file = file; diff --git a/daemon/nfs41_session.c b/daemon/nfs41_session.c index 3d4608c..7b8126b 100644 --- a/daemon/nfs41_session.c +++ b/daemon/nfs41_session.c @@ -54,12 +54,11 @@ static void init_slot_table(nfs41_slot_table *table) LeaveCriticalSection(&table->lock); } -int nfs41_session_bump_seq( +void nfs41_session_bump_seq( IN nfs41_session *session, IN uint32_t slotid) { nfs41_slot_table *table = &session->table; - int status = NO_ERROR; AcquireSRWLockShared(&session->client->session_lock); EnterCriticalSection(&table->lock); @@ -69,15 +68,13 @@ int nfs41_session_bump_seq( LeaveCriticalSection(&table->lock); ReleaseSRWLockShared(&session->client->session_lock); - return status; } -int nfs41_session_free_slot( +void nfs41_session_free_slot( IN nfs41_session *session, IN uint32_t slotid) { nfs41_slot_table *table = &session->table; - int status = NO_ERROR; AcquireSRWLockShared(&session->client->session_lock); EnterCriticalSection(&table->lock); @@ -101,10 +98,9 @@ int nfs41_session_free_slot( LeaveCriticalSection(&table->lock); ReleaseSRWLockShared(&session->client->session_lock); - return status; } -int nfs41_session_get_slot( +void nfs41_session_get_slot( IN nfs41_session *session, OUT uint32_t *slot, OUT uint32_t *seqid, @@ -112,7 +108,6 @@ int nfs41_session_get_slot( { nfs41_slot_table *table = &session->table; uint32_t i; - int status = NO_ERROR; AcquireSRWLockShared(&session->client->session_lock); EnterCriticalSection(&table->lock); @@ -140,24 +135,17 @@ int nfs41_session_get_slot( dprintf(2, "session %p: using slot#=%d with seq#=%d highest=%d\n", session, *slot, *seqid, *highest); - return status; } -int nfs41_session_sequence( +void nfs41_session_sequence( nfs41_sequence_args *args, nfs41_session *session, bool_t cachethis) { - uint32_t status = NO_ERROR; - - status = nfs41_session_get_slot(session, &args->sa_slotid, + nfs41_session_get_slot(session, &args->sa_slotid, &args->sa_sequenceid, &args->sa_highest_slotid); - if (status) - goto out; args->sa_sessionid = session->session_id; args->sa_cachethis = cachethis; -out: - return status; }