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 <cbodley@citi.umich.edu>
This commit is contained in:
Casey Bodley 2012-05-10 14:04:23 -04:00 committed by Olga Kornievskaia
parent 94fc1d946c
commit 1905abd027
6 changed files with 48 additions and 132 deletions

View file

@ -120,9 +120,7 @@ static int lookup_rpc(
compound_init(&compound, argops, resops, "lookup"); compound_init(&compound, argops, resops, "lookup");
compound_add_op(&compound, OP_SEQUENCE, &args->sequence, &res->sequence); compound_add_op(&compound, OP_SEQUENCE, &args->sequence, &res->sequence);
status = nfs41_session_sequence(&args->sequence, session, 0); nfs41_session_sequence(&args->sequence, session, 0);
if (status)
goto out;
if (dir == &res->root) { if (dir == &res->root) {
compound_add_op(&compound, OP_PUTROOTFH, NULL, &res->putfh); compound_add_op(&compound, OP_PUTROOTFH, NULL, &res->putfh);

View file

@ -1301,9 +1301,7 @@ static int rpc_array_putfh(
compound_init(&compound, argops, resops, "array_putfh"); compound_init(&compound, argops, resops, "array_putfh");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
for (i = 0; i < count; i++){ for (i = 0; i < count; i++){
compound_add_op(&compound, OP_PUTFH, &putfh_args[i], &putfh_res[i]); compound_add_op(&compound, OP_PUTFH, &putfh_args[i], &putfh_res[i]);

View file

@ -345,22 +345,22 @@ int nfs41_session_set_lease(
void nfs41_session_free( void nfs41_session_free(
IN nfs41_session *session); IN nfs41_session *session);
int nfs41_session_bump_seq( void nfs41_session_bump_seq(
IN nfs41_session *session, IN nfs41_session *session,
IN uint32_t slotid); IN uint32_t slotid);
int nfs41_session_free_slot( void nfs41_session_free_slot(
IN nfs41_session *session, IN nfs41_session *session,
IN uint32_t slotid); IN uint32_t slotid);
int nfs41_session_get_slot( void nfs41_session_get_slot(
IN nfs41_session *session, IN nfs41_session *session,
OUT uint32_t *slot, OUT uint32_t *slot,
OUT uint32_t *seq, OUT uint32_t *seq,
OUT uint32_t *highest); OUT uint32_t *highest);
struct __nfs41_sequence_args; struct __nfs41_sequence_args;
int nfs41_session_sequence( void nfs41_session_sequence(
struct __nfs41_sequence_args *args, struct __nfs41_sequence_args *args,
nfs41_session *session, nfs41_session *session,
bool_t cachethis); bool_t cachethis);

View file

@ -159,10 +159,10 @@ retry:
(nfs41_sequence_res *)compound->res.resarray[0].res; (nfs41_sequence_res *)compound->res.resarray[0].res;
if (seq->sr_status == NFS4_OK) { if (seq->sr_status == NFS4_OK) {
// returned slotid must be the same we sent // returned slotid must be the same we sent
status = NFS4ERR_IO;
if (seq->sr_resok4.sr_slotid != args->sa_slotid) { if (seq->sr_resok4.sr_slotid != args->sa_slotid) {
eprintf("[session] sr_slotid=%d != sa_slotid=%d\n", eprintf("[session] sr_slotid=%d != sa_slotid=%d\n",
seq->sr_resok4.sr_slotid, args->sa_slotid); seq->sr_resok4.sr_slotid, args->sa_slotid);
status = NFS4ERR_IO;
goto out_free_slot; goto out_free_slot;
} }
// returned sessionid must be the same we sent // returned sessionid must be the same we sent
@ -173,14 +173,13 @@ retry:
seq->sr_resok4.sr_sessionid, NFS4_SESSIONID_SIZE); seq->sr_resok4.sr_sessionid, NFS4_SESSIONID_SIZE);
print_hexbuf(1, (unsigned char *)"sa_sessionid", print_hexbuf(1, (unsigned char *)"sa_sessionid",
args->sa_sessionid, NFS4_SESSIONID_SIZE); args->sa_sessionid, NFS4_SESSIONID_SIZE);
status = NFS4ERR_IO;
goto out_free_slot; goto out_free_slot;
} }
if (seq->sr_resok4.sr_status_flags) if (seq->sr_resok4.sr_status_flags)
print_sr_status_flags(1, 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); nfs41_session_bump_seq(session, args->sa_slotid);
if (status)
goto out_free_slot;
/* check sequence status flags for state revocation */ /* check sequence status flags for state revocation */
if (try_recovery && seq->sr_resok4.sr_status_flags) if (try_recovery && seq->sr_resok4.sr_status_flags)
@ -444,11 +443,8 @@ out:
return status; return status;
do_retry: do_retry:
if (compound->res.resarray[0].op == OP_SEQUENCE) { if (compound->res.resarray[0].op == OP_SEQUENCE)
status = nfs41_session_get_slot(session, &args->sa_slotid, nfs41_session_get_slot(session, &args->sa_slotid,
&args->sa_sequenceid, &args->sa_highest_slotid); &args->sa_sequenceid, &args->sa_highest_slotid);
if (status)
goto out;
}
goto retry; goto retry;
} }

View file

@ -279,9 +279,7 @@ enum nfsstat4 nfs41_reclaim_complete(
compound_init(&compound, argops, resops, "reclaim_complete"); compound_init(&compound, argops, resops, "reclaim_complete");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_RECLAIM_COMPLETE, NULL, &reclaim_res); compound_add_op(&compound, OP_RECLAIM_COMPLETE, NULL, &reclaim_res);
@ -434,9 +432,7 @@ int nfs41_open(
compound_init(&compound, argops, resops, "open"); compound_init(&compound, argops, resops, "open");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
if (current_fh_is_dir) { if (current_fh_is_dir) {
/* CURRENT_FH: directory */ /* CURRENT_FH: directory */
@ -563,9 +559,7 @@ int nfs41_create(
compound_init(&compound, argops, resops, "create"); compound_init(&compound, argops, resops, "create");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = parent; putfh_args.file = parent;
@ -655,9 +649,7 @@ int nfs41_close(
compound_init(&compound, argops, resops, "close"); compound_init(&compound, argops, resops, "close");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -723,9 +715,7 @@ int nfs41_write(
stateid->stateid.seqid == 0 ? "ds write" : "write"); stateid->stateid.seqid == 0 ? "ds write" : "write");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -806,9 +796,7 @@ int nfs41_read(
stateid->stateid.seqid == 0 ? "ds read" : "read"); stateid->stateid.seqid == 0 ? "ds read" : "read");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -870,9 +858,7 @@ int nfs41_commit(
do_getattr ? "commit" : "ds commit"); do_getattr ? "commit" : "ds commit");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -940,9 +926,7 @@ int nfs41_lock(
compound_init(&compound, argops, resops, "lock"); compound_init(&compound, argops, resops, "lock");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1000,9 +984,7 @@ int nfs41_unlock(
compound_init(&compound, argops, resops, "unlock"); compound_init(&compound, argops, resops, "unlock");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1048,9 +1030,7 @@ int nfs41_readdir(
compound_init(&compound, argops, resops, "readdir"); compound_init(&compound, argops, resops, "readdir");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1100,9 +1080,7 @@ int nfs41_getattr(
compound_init(&compound, argops, resops, "getattr"); compound_init(&compound, argops, resops, "getattr");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
if (file) { if (file) {
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); 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_init(&compound, argops, resops, "getfsattr");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1227,9 +1203,7 @@ int nfs41_remove(
compound_init(&compound, argops, resops, "remove"); compound_init(&compound, argops, resops, "remove");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = parent; putfh_args.file = parent;
@ -1301,9 +1275,7 @@ int nfs41_rename(
compound_init(&compound, argops, resops, "rename"); compound_init(&compound, argops, resops, "rename");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &src_putfh_args, &src_putfh_res); compound_add_op(&compound, OP_PUTFH, &src_putfh_args, &src_putfh_res);
src_putfh_args.file = src_dir; src_putfh_args.file = src_dir;
@ -1399,9 +1371,7 @@ int nfs41_setattr(
compound_init(&compound, argops, resops, "setattr"); compound_init(&compound, argops, resops, "setattr");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1467,9 +1437,7 @@ int nfs41_link(
compound_init(&compound, argops, resops, "link"); compound_init(&compound, argops, resops, "link");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 1); nfs41_session_sequence(&sequence_args, session, 1);
if (status)
goto out;
/* PUTFH(src) */ /* PUTFH(src) */
compound_add_op(&compound, OP_PUTFH, &putfh_args[0], &putfh_res[0]); 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_init(&compound, argops, resops, "readlink");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1606,9 +1572,7 @@ int nfs41_access(
compound_init(&compound, argops, resops, "access"); compound_init(&compound, argops, resops, "access");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1645,9 +1609,7 @@ int nfs41_send_sequence(
compound_init(&compound, argops, resops, "sequence"); compound_init(&compound, argops, resops, "sequence");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
status = compound_encode_send_decode(session, &compound, TRUE); status = compound_encode_send_decode(session, &compound, TRUE);
if (status) if (status)
@ -1681,9 +1643,7 @@ enum nfsstat4 nfs41_want_delegation(
compound_init(&compound, argops, resops, "want_delegation"); compound_init(&compound, argops, resops, "want_delegation");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1717,9 +1677,7 @@ int nfs41_delegpurge(
compound_init(&compound, argops, resops, "delegpurge"); compound_init(&compound, argops, resops, "delegpurge");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_DELEGPURGE, NULL, &dp_res); compound_add_op(&compound, OP_DELEGPURGE, NULL, &dp_res);
@ -1752,9 +1710,7 @@ int nfs41_delegreturn(
compound_init(&compound, argops, resops, "delegreturn"); compound_init(&compound, argops, resops, "delegreturn");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -1802,9 +1758,7 @@ enum nfsstat4 nfs41_fs_locations(
compound_init(&compound, argops, resops, "fs_locations"); compound_init(&compound, argops, resops, "fs_locations");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = parent; putfh_args.file = parent;
@ -1848,9 +1802,7 @@ int nfs41_secinfo(
compound_init(&compound, argops, resops, "secinfo"); compound_init(&compound, argops, resops, "secinfo");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
if (file == NULL) if (file == NULL)
compound_add_op(&compound, OP_PUTROOTFH, NULL, &putfh_res); 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_init(&compound, argops, resops, "secinfo_no_name");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
if (file == NULL) if (file == NULL)
compound_add_op(&compound, OP_PUTROOTFH, NULL, &putfh_res); 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_init(&compound, argops, resops, "free_stateid");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_FREE_STATEID, &freestateid_args, &freestateid_res); compound_add_op(&compound, OP_FREE_STATEID, &freestateid_args, &freestateid_res);
freestateid_args.stateid = stateid; freestateid_args.stateid = stateid;
@ -1967,9 +1915,7 @@ enum nfsstat4 nfs41_test_stateid(
compound_init(&compound, argops, resops, "test_stateid"); compound_init(&compound, argops, resops, "test_stateid");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_TEST_STATEID, &teststateid_args, &teststateid_res); compound_add_op(&compound, OP_TEST_STATEID, &teststateid_args, &teststateid_res);
teststateid_args.stateids = stateid_array; teststateid_args.stateids = stateid_array;
@ -2012,9 +1958,7 @@ enum nfsstat4 pnfs_rpc_layoutget(
compound_init(&compound, argops, resops, "layoutget"); compound_init(&compound, argops, resops, "layoutget");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -2081,9 +2025,7 @@ enum nfsstat4 pnfs_rpc_layoutcommit(
compound_init(&compound, argops, resops, "layoutcommit"); compound_init(&compound, argops, resops, "layoutcommit");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -2140,9 +2082,7 @@ enum nfsstat4 pnfs_rpc_layoutreturn(
compound_init(&compound, argops, resops, "layoutreturn"); compound_init(&compound, argops, resops, "layoutreturn");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;
@ -2183,9 +2123,7 @@ enum nfsstat4 pnfs_rpc_getdeviceinfo(
compound_init(&compound, argops, resops, "get_deviceinfo"); compound_init(&compound, argops, resops, "get_deviceinfo");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_GETDEVICEINFO, compound_add_op(&compound, OP_GETDEVICEINFO,
&getdeviceinfo_args, &getdeviceinfo_res); &getdeviceinfo_args, &getdeviceinfo_res);
@ -2225,9 +2163,7 @@ enum nfsstat4 nfs41_rpc_openattr(
compound_init(&compound, argops, resops, "openattr"); compound_init(&compound, argops, resops, "openattr");
compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res); compound_add_op(&compound, OP_SEQUENCE, &sequence_args, &sequence_res);
status = nfs41_session_sequence(&sequence_args, session, 0); nfs41_session_sequence(&sequence_args, session, 0);
if (status)
goto out;
compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res); compound_add_op(&compound, OP_PUTFH, &putfh_args, &putfh_res);
putfh_args.file = file; putfh_args.file = file;

View file

@ -54,12 +54,11 @@ static void init_slot_table(nfs41_slot_table *table)
LeaveCriticalSection(&table->lock); LeaveCriticalSection(&table->lock);
} }
int nfs41_session_bump_seq( void nfs41_session_bump_seq(
IN nfs41_session *session, IN nfs41_session *session,
IN uint32_t slotid) IN uint32_t slotid)
{ {
nfs41_slot_table *table = &session->table; nfs41_slot_table *table = &session->table;
int status = NO_ERROR;
AcquireSRWLockShared(&session->client->session_lock); AcquireSRWLockShared(&session->client->session_lock);
EnterCriticalSection(&table->lock); EnterCriticalSection(&table->lock);
@ -69,15 +68,13 @@ int nfs41_session_bump_seq(
LeaveCriticalSection(&table->lock); LeaveCriticalSection(&table->lock);
ReleaseSRWLockShared(&session->client->session_lock); ReleaseSRWLockShared(&session->client->session_lock);
return status;
} }
int nfs41_session_free_slot( void nfs41_session_free_slot(
IN nfs41_session *session, IN nfs41_session *session,
IN uint32_t slotid) IN uint32_t slotid)
{ {
nfs41_slot_table *table = &session->table; nfs41_slot_table *table = &session->table;
int status = NO_ERROR;
AcquireSRWLockShared(&session->client->session_lock); AcquireSRWLockShared(&session->client->session_lock);
EnterCriticalSection(&table->lock); EnterCriticalSection(&table->lock);
@ -101,10 +98,9 @@ int nfs41_session_free_slot(
LeaveCriticalSection(&table->lock); LeaveCriticalSection(&table->lock);
ReleaseSRWLockShared(&session->client->session_lock); ReleaseSRWLockShared(&session->client->session_lock);
return status;
} }
int nfs41_session_get_slot( void nfs41_session_get_slot(
IN nfs41_session *session, IN nfs41_session *session,
OUT uint32_t *slot, OUT uint32_t *slot,
OUT uint32_t *seqid, OUT uint32_t *seqid,
@ -112,7 +108,6 @@ int nfs41_session_get_slot(
{ {
nfs41_slot_table *table = &session->table; nfs41_slot_table *table = &session->table;
uint32_t i; uint32_t i;
int status = NO_ERROR;
AcquireSRWLockShared(&session->client->session_lock); AcquireSRWLockShared(&session->client->session_lock);
EnterCriticalSection(&table->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", dprintf(2, "session %p: using slot#=%d with seq#=%d highest=%d\n",
session, *slot, *seqid, *highest); session, *slot, *seqid, *highest);
return status;
} }
int nfs41_session_sequence( void nfs41_session_sequence(
nfs41_sequence_args *args, nfs41_sequence_args *args,
nfs41_session *session, nfs41_session *session,
bool_t cachethis) bool_t cachethis)
{ {
uint32_t status = NO_ERROR; nfs41_session_get_slot(session, &args->sa_slotid,
status = nfs41_session_get_slot(session, &args->sa_slotid,
&args->sa_sequenceid, &args->sa_highest_slotid); &args->sa_sequenceid, &args->sa_highest_slotid);
if (status)
goto out;
args->sa_sessionid = session->session_id; args->sa_sessionid = session->session_id;
args->sa_cachethis = cachethis; args->sa_cachethis = cachethis;
out:
return status;
} }