lkml.org 
[lkml]   [2011]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH (RESEND) 04/12] nfs: Use request destination addr as callback source addr.
    Date
    From: Ben Greear <greearb@candelatech.com>

    This helps make sure that responses use the correct
    source address on multi-homed machines.

    Signed-off-by: Ben Greear <greearb@candelatech.com>
    ---
    :100644 100644 b257383... 00902ec... M fs/nfs/callback.h
    :100644 100644 c6c86a7... ed5be89... M fs/nfs/callback_xdr.c
    :100644 100644 ea29330... 45d5d7c... M include/linux/sunrpc/svc.h
    fs/nfs/callback.h | 3 +++
    fs/nfs/callback_xdr.c | 3 +++
    include/linux/sunrpc/svc.h | 5 +++++
    3 files changed, 11 insertions(+), 0 deletions(-)

    diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h
    index b257383..00902ec 100644
    --- a/fs/nfs/callback.h
    +++ b/fs/nfs/callback.h
    @@ -57,6 +57,7 @@ struct cb_compound_hdr_res {

    struct cb_getattrargs {
    struct sockaddr *addr;
    + struct sockaddr *srcaddr;
    struct nfs_fh fh;
    uint32_t bitmap[2];
    };
    @@ -72,6 +73,7 @@ struct cb_getattrres {

    struct cb_recallargs {
    struct sockaddr *addr;
    + struct sockaddr *srcaddr;
    struct nfs_fh fh;
    nfs4_stateid stateid;
    uint32_t truncate;
    @@ -92,6 +94,7 @@ struct referring_call_list {

    struct cb_sequenceargs {
    struct sockaddr *csa_addr;
    + struct sockaddr *csa_daddr;
    struct nfs4_sessionid csa_sessionid;
    uint32_t csa_sequenceid;
    uint32_t csa_slotid;
    diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
    index c6c86a7..ed5be89 100644
    --- a/fs/nfs/callback_xdr.c
    +++ b/fs/nfs/callback_xdr.c
    @@ -196,6 +196,7 @@ static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr
    if (unlikely(status != 0))
    goto out;
    args->addr = svc_addr(rqstp);
    + args->srcaddr = svc_daddr(rqstp);
    status = decode_bitmap(xdr, args->bitmap);
    out:
    dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
    @@ -208,6 +209,7 @@ static __be32 decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr,
    __be32 status;

    args->addr = svc_addr(rqstp);
    + args->srcaddr = svc_daddr(rqstp);
    status = decode_stateid(xdr, &args->stateid);
    if (unlikely(status != 0))
    goto out;
    @@ -442,6 +444,7 @@ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp,
    goto out;

    args->csa_addr = svc_addr(rqstp);
    + args->csa_daddr = svc_daddr(rqstp);
    args->csa_sequenceid = ntohl(*p++);
    args->csa_slotid = ntohl(*p++);
    args->csa_highestslotid = ntohl(*p++);
    diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
    index ea29330..45d5d7c 100644
    --- a/include/linux/sunrpc/svc.h
    +++ b/include/linux/sunrpc/svc.h
    @@ -299,6 +299,11 @@ static inline struct sockaddr *svc_addr(const struct svc_rqst *rqst)
    return (struct sockaddr *) &rqst->rq_addr;
    }

    +static inline struct sockaddr *svc_daddr(struct svc_rqst *rqst)
    +{
    + return (struct sockaddr *) &rqst->rq_daddr;
    +}
    +
    /*
    * Check buffer bounds after decoding arguments
    */
    --
    1.7.3.4


    \
     
     \ /
      Last update: 2011-07-15 19:59    [W:0.022 / U:1.208 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site