summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-11-16 12:45:06 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-11-26 17:49:51 -0500
commitdf2fabffbace8988f3265585ec793ff9deccdea7 (patch)
tree42aa051469cfd040504597235e462f2077b1ed0e
parente3725ec015dfbbeb896295cf2b3a995f28b0630e (diff)
downloadop-kernel-dev-df2fabffbace8988f3265585ec793ff9deccdea7.zip
op-kernel-dev-df2fabffbace8988f3265585ec793ff9deccdea7.tar.gz
NFSv4.1: Label each entry in the session slot tables with its slot number
Instead of doing slot table pointer gymnastics every time we want to know which slot we're using. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/nfs4proc.c12
-rw-r--r--fs/nfs/nfs4xdr.c2
-rw-r--r--include/linux/nfs_xdr.h1
3 files changed, 9 insertions, 6 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 5b61c4a..4311dba 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -526,9 +526,9 @@ static int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *
* returned NFS4ERR_DELAY as per Section 2.10.6.2
* of RFC5661.
*/
- dprintk("%s: slot=%td seq=%d: Operation in progress\n",
+ dprintk("%s: slot=%u seq=%u: Operation in progress\n",
__func__,
- slot - session->fc_slot_table.slots,
+ slot->slot_nr,
slot->seq_nr);
goto out_retry;
default:
@@ -671,9 +671,9 @@ int nfs4_setup_sequence(const struct nfs_server *server,
if (session == NULL)
goto out;
- dprintk("--> %s clp %p session %p sr_slot %td\n",
+ dprintk("--> %s clp %p session %p sr_slot %d\n",
__func__, session->clp, session, res->sr_slot ?
- res->sr_slot - session->fc_slot_table.slots : -1);
+ res->sr_slot->slot_nr : -1);
ret = nfs41_setup_sequence(session, args, res, task);
out:
@@ -5669,8 +5669,10 @@ struct nfs4_slot *nfs4_alloc_slots(struct nfs4_slot_table *table,
tbl = kmalloc_array(max_slots, sizeof(*tbl), gfp_flags);
if (tbl != NULL) {
- for (i = 0; i < max_slots; i++)
+ for (i = 0; i < max_slots; i++) {
tbl[i].table = table;
+ tbl[i].slot_nr = i;
+ }
}
return tbl;
}
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 4126f05..50bac70 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -5547,7 +5547,7 @@ static int decode_sequence(struct xdr_stream *xdr,
}
/* slot id */
dummy = be32_to_cpup(p++);
- if (dummy != res->sr_slot - session->fc_slot_table.slots) {
+ if (dummy != res->sr_slot->slot_nr) {
dprintk("%s Invalid slot id\n", __func__);
goto out_err;
}
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 0fd88ab..9c9b76c 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -189,6 +189,7 @@ struct nfs4_channel_attrs {
struct nfs4_slot {
struct nfs4_slot_table *table;
unsigned long renewal_time;
+ u32 slot_nr;
u32 seq_nr;
};
OpenPOWER on IntegriCloud