]> git.hungrycats.org Git - linux/commitdiff
RPCSEC_GSS: Move the gss sequence number history from the task
authorTrond Myklebust <trond.myklebust@fys.uio.no>
Sat, 7 Feb 2004 15:45:27 +0000 (16:45 +0100)
committerTrond Myklebust <trond.myklebust@fys.uio.no>
Sat, 7 Feb 2004 15:45:27 +0000 (16:45 +0100)
structure to the request structure, where it makes more sense.
In particular, when we start storing more sequence number
history (necessary to process responses to resent requests
correctly), this will make it easier to initialize the
necessary data structure in the right place (in
xprt_request_init).

include/linux/sunrpc/sched.h
include/linux/sunrpc/xprt.h
net/sunrpc/auth_gss/auth_gss.c

index 5e2d23e0ce6c2afcf9791624e5c73f66dfabfb52..1113d7f3df1385192db69bbe610449a7d8655d4a 100644 (file)
@@ -48,8 +48,6 @@ struct rpc_task {
        __u8                    tk_garb_retry,
                                tk_cred_retry,
                                tk_suid_retry;
-       u32                     tk_gss_seqno;   /* rpcsec_gss sequence number
-                                                  used on this request */
 
        /*
         * timeout_fn   to be executed by timer bottom half
index e29381edeaeafefd82706c8bb457766d9fbda96e..8472b1c5ad2e705518d166c4b449c25c92d83486 100644 (file)
@@ -95,6 +95,7 @@ struct rpc_rqst {
        struct rpc_rqst *       rq_next;        /* free list */
        int                     rq_cong;        /* has incremented xprt->cong */
        int                     rq_received;    /* receive completed */
+       u32                     rq_seqno;       /* gss seq no. used on req. */
 
        struct list_head        rq_list;
 
index 1a4b9f504aa22001a98401cc70e9fc75a0084964..ef57f1942ea4cc8f0324220c1d2088ae5204c332 100644 (file)
@@ -690,12 +690,12 @@ gss_marshal(struct rpc_task *task, u32 *p, int ruid)
                goto out_put_ctx;
        }
        spin_lock(&ctx->gc_seq_lock);
-       task->tk_gss_seqno = ctx->gc_seq++;
+       req->rq_seqno = ctx->gc_seq++;
        spin_unlock(&ctx->gc_seq_lock);
 
        *p++ = htonl((u32) RPC_GSS_VERSION);
        *p++ = htonl((u32) ctx->gc_proc);
-       *p++ = htonl((u32) task->tk_gss_seqno);
+       *p++ = htonl((u32) req->rq_seqno);
        *p++ = htonl((u32) service);
        p = xdr_encode_netobj(p, &ctx->gc_wire_ctx);
        *cred_len = htonl((p - (cred_len + 1)) << 2);
@@ -766,7 +766,7 @@ gss_validate(struct rpc_task *task, u32 *p)
                 goto out_bad;
        if (flav != RPC_AUTH_GSS)
                goto out_bad;
-       seq = htonl(task->tk_gss_seqno);
+       seq = htonl(task->tk_rqstp->rq_seqno);
        iov.iov_base = &seq;
        iov.iov_len = sizeof(seq);
        xdr_buf_from_iov(&iov, &verf_buf);
@@ -832,7 +832,7 @@ gss_wrap_req(struct rpc_task *task,
 
                        integ_len = p++;
                        offset = (u8 *)p - (u8 *)snd_buf->head[0].iov_base;
-                       *p++ = htonl(task->tk_gss_seqno);
+                       *p++ = htonl(req->rq_seqno);
 
                        status = encode(rqstp, p, obj);
                        if (status)
@@ -909,7 +909,7 @@ gss_unwrap_resp(struct rpc_task *task,
                        mic_offset = integ_len + data_offset;
                        if (mic_offset > rcv_buf->len)
                                goto out;
-                       if (ntohl(*p++) != task->tk_gss_seqno)
+                       if (ntohl(*p++) != req->rq_seqno)
                                goto out;
 
                        if (xdr_buf_subsegment(rcv_buf, &integ_buf, data_offset,