lkml.org 
[lkml]   [2006]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 013 of 14] knfsd: SUNRPC: fix up svc_create_socket() to take a sockaddr struct + length

    From: Chuck Lever <chuck.lever@oracle.com>
    Replace existing svc_create_socket() API to allow callers to pass addresses
    larger than a sockaddr_in.

    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Cc: Aurelien Charbon <aurelien.charbon@ext.bull.net>
    Signed-off-by: Neil Brown <neilb@suse.de>

    ### Diffstat output
    ./net/sunrpc/svcsock.c | 16 ++++++++--------
    1 file changed, 8 insertions(+), 8 deletions(-)
    diff .prev/net/sunrpc/svcsock.c ./net/sunrpc/svcsock.c
    --- .prev/net/sunrpc/svcsock.c 2006-12-13 10:32:20.000000000 +1100
    +++ ./net/sunrpc/svcsock.c 2006-12-13 10:32:50.000000000 +1100
    @@ -1677,7 +1677,7 @@ EXPORT_SYMBOL_GPL(svc_addsock);
    * Create socket for RPC service.
    */
    static int svc_create_socket(struct svc_serv *serv, int protocol,
    - struct sockaddr_in *sin, int flags)
    + struct sockaddr *sin, int len, int flags)
    {
    struct svc_sock *svsk;
    struct socket *sock;
    @@ -1687,8 +1687,7 @@ static int svc_create_socket(struct svc_

    dprintk("svc: svc_create_socket(%s, %d, %s)\n",
    serv->sv_program->pg_name, protocol,
    - __svc_print_addr((struct sockaddr *) sin, buf,
    - sizeof(buf)));
    + __svc_print_addr(sin, buf, sizeof(buf)));

    if (protocol != IPPROTO_UDP && protocol != IPPROTO_TCP) {
    printk(KERN_WARNING "svc: only UDP and TCP "
    @@ -1697,15 +1696,15 @@ static int svc_create_socket(struct svc_
    }
    type = (protocol == IPPROTO_UDP)? SOCK_DGRAM : SOCK_STREAM;

    - if ((error = sock_create_kern(PF_INET, type, protocol, &sock)) < 0)
    + error = sock_create_kern(sin->sa_family, type, protocol, &sock);
    + if (error < 0)
    return error;

    svc_reclassify_socket(sock);

    if (type == SOCK_STREAM)
    - sock->sk->sk_reuse = 1; /* allow address reuse */
    - error = kernel_bind(sock, (struct sockaddr *) sin,
    - sizeof(*sin));
    + sock->sk->sk_reuse = 1; /* allow address reuse */
    + error = kernel_bind(sock, sin, len);
    if (error < 0)
    goto bummer;

    @@ -1783,7 +1782,8 @@ int svc_makesock(struct svc_serv *serv,
    };

    dprintk("svc: creating socket proto = %d\n", protocol);
    - return svc_create_socket(serv, protocol, &sin, flags);
    + return svc_create_socket(serv, protocol, (struct sockaddr *) &sin,
    + sizeof(sin), flags);
    }

    /*
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-12-13 01:23    [from the cache]
    ©2003-2011 Jasper Spaans