Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f988443a84528bd30c2f474efa5e2c511959f19b
Commit:     f988443a84528bd30c2f474efa5e2c511959f19b
Parent:     dd08d6ea443abafe9455997d2889719364b8794b
Author:     NeilBrown <[EMAIL PROTECTED]>
AuthorDate: Wed Dec 13 00:35:45 2006 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed Dec 13 09:05:54 2006 -0800

    [PATCH] knfsd: Fix up some bit-rot in exp_export
    
    The nfsservctl system call isn't used but recent nfs-utils releases for
    exporting filesystems, and consequently the code that is uses - exp_export -
    has suffered some bitrot.
    
    Particular:
      - some newly added fields in 'struct svc_export' are being initialised
        properly.
      - the return value is now always -ENOMEM ...
    
    This patch fixes both these problems.
    
    Signed-off-by: Neil Brown <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 fs/nfsd/export.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
index 1137d09..248dd92 100644
--- a/fs/nfsd/export.c
+++ b/fs/nfsd/export.c
@@ -955,6 +955,8 @@ exp_export(struct nfsctl_export *nxp)
 
        exp = exp_get_by_name(clp, nd.mnt, nd.dentry, NULL);
 
+       memset(&new, 0, sizeof(new));
+
        /* must make sure there won't be an ex_fsid clash */
        if ((nxp->ex_flags & NFSEXP_FSID) &&
            (fsid_key = exp_get_fsid_key(clp, nxp->ex_dev)) &&
@@ -985,6 +987,9 @@ exp_export(struct nfsctl_export *nxp)
 
        new.h.expiry_time = NEVER;
        new.h.flags = 0;
+       new.ex_path = kstrdup(nxp->ex_path, GFP_KERNEL);
+       if (!new.ex_path)
+               goto finish;
        new.ex_client = clp;
        new.ex_mnt = nd.mnt;
        new.ex_dentry = nd.dentry;
@@ -1005,10 +1010,11 @@ exp_export(struct nfsctl_export *nxp)
                /* failed to create at least one index */
                exp_do_unexport(exp);
                cache_flush();
-               err = -ENOMEM;
-       }
-
+       } else
+               err = 0;
 finish:
+       if (new.ex_path)
+               kfree(new.ex_path);
        if (exp)
                exp_put(exp);
        if (fsid_key && !IS_ERR(fsid_key))
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to