lkml.org 
[lkml]   [2006]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    From
    Date
    Subject[PATCH 005 of 11] knfsd: Fixed handling of lockd fail when adding nfsd socket.

    Arrgg..
    We cannot 'lockd_up' before 'svc_addsock' as we don't know
    the protocol yet....
    So switch it around again and save the name of the
    created sockets so that it can be closed if lock_up fails.

    Signed-off-by: Neil Brown <neilb@suse.de>

    ### Diffstat output
    ./fs/nfsd/nfsctl.c | 12 ++++++------
    ./net/sunrpc/svcsock.c | 3 +++
    2 files changed, 9 insertions(+), 6 deletions(-)

    diff .prev/fs/nfsd/nfsctl.c ./fs/nfsd/nfsctl.c
    --- .prev/fs/nfsd/nfsctl.c 2006-08-24 16:24:47.000000000 +1000
    +++ ./fs/nfsd/nfsctl.c 2006-08-24 16:24:56.000000000 +1000
    @@ -523,11 +523,11 @@ static ssize_t write_ports(struct file *
    err = nfsd_create_serv();
    if (!err) {
    int proto = 0;
    - err = lockd_up(proto);
    - if (!err) {
    - err = svc_addsock(nfsd_serv, fd, buf, &proto);
    - if (err)
    - lockd_down();
    + err = svc_addsock(nfsd_serv, fd, buf, &proto);
    + if (err >= 0) {
    + err = lockd_up(proto);
    + if (err < 0)
    + svc_sock_names(buf+strlen(buf)+1, nfsd_serv, buf);
    }
    /* Decrease the count, but don't shutdown the
    * the service
    @@ -536,7 +536,7 @@ static ssize_t write_ports(struct file *
    nfsd_serv->sv_nrthreads--;
    unlock_kernel();
    }
    - return err;
    + return err < 0 ? err : 0;
    }
    if (buf[0] == '-') {
    char *toclose = kstrdup(buf+1, GFP_KERNEL);
    diff .prev/net/sunrpc/svcsock.c ./net/sunrpc/svcsock.c
    --- .prev/net/sunrpc/svcsock.c 2006-08-24 16:24:21.000000000 +1000
    +++ ./net/sunrpc/svcsock.c 2006-08-24 16:24:56.000000000 +1000
    @@ -492,6 +492,9 @@ svc_sock_names(char *buf, struct svc_ser
    }
    spin_unlock(&serv->sv_lock);
    if (closesk)
    + /* Should unregister with portmap, but you cannot
    + * unregister just one protocol...
    + */
    svc_delete_socket(closesk);
    else if (toclose)
    return -ENOENT;
    -
    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-08-24 08:43    [W:0.049 / U:1.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site