diff options
Diffstat (limited to 'xlators/nfs/server/src/nfs3-helpers.c')
| -rw-r--r-- | xlators/nfs/server/src/nfs3-helpers.c | 5055 | 
1 files changed, 2474 insertions, 2581 deletions
diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c index 27edf471db2..7fa278fdc24 100644 --- a/xlators/nfs/server/src/nfs3-helpers.c +++ b/xlators/nfs/server/src/nfs3-helpers.c @@ -27,231 +27,222 @@  #include <string.h>  extern int -nfs3_set_root_looked_up (struct nfs3_state *nfs3, struct nfs3_fh *rootfh); +nfs3_set_root_looked_up(struct nfs3_state *nfs3, struct nfs3_fh *rootfh);  extern int -nfs3_is_root_looked_up (struct nfs3_state *nfs3, struct nfs3_fh *rootfh); +nfs3_is_root_looked_up(struct nfs3_state *nfs3, struct nfs3_fh *rootfh); +#define nfs3_call_resume(cst)                                                  \ +    do {                                                                       \ +        if (((cst)) && (cst)->resume_fn)                                       \ +            (cst)->resume_fn(cst);                                             \ +    } while (0) -#define nfs3_call_resume(cst)                                   \ -        do {                                                    \ -                if (((cst)) && (cst)->resume_fn)                \ -                        (cst)->resume_fn (cst);                 \ -        } while (0)                                             \ - -#define nfs3_call_resume_estale(csta)                           \ -        do {                                                    \ -                (csta)->resolve_ret = -1;                       \ -                (csta)->resolve_errno = ESTALE;                 \ -                nfs3_call_resume (csta);                        \ -        } while (0)                                             \ +#define nfs3_call_resume_estale(csta)                                          \ +    do {                                                                       \ +        (csta)->resolve_ret = -1;                                              \ +        (csta)->resolve_errno = ESTALE;                                        \ +        nfs3_call_resume(csta);                                                \ +    } while (0)  struct nfs3stat_strerror { -        nfsstat3        stat; -        char            strerror[100]; +    nfsstat3 stat; +    char strerror[100];  }; -  struct nfs3stat_strerror nfs3stat_strerror_table[] = { -        { NFS3_OK,              "Call completed successfully."          }, -        { NFS3ERR_PERM,         "Not owner"                             }, -        { NFS3ERR_NOENT,        "No such file or directory"             }, -        { NFS3ERR_IO,           "I/O error"                             }, -        { NFS3ERR_NXIO,         "I/O error"                             }, -        { NFS3ERR_ACCES,        "Permission denied"                     }, -        { NFS3ERR_EXIST,        "File exists"                           }, -        { NFS3ERR_XDEV,         "Attempt to do a cross-device hard link"}, -        { NFS3ERR_NODEV,        "No such device"                        }, -        { NFS3ERR_NOTDIR,       "Not a directory"                       }, -        { NFS3ERR_ISDIR,        "Is a directory"                        }, -        { NFS3ERR_INVAL,        "Invalid argument for operation"        }, -        { NFS3ERR_FBIG,         "File too large"                        }, -        { NFS3ERR_NOSPC,        "No space left on device"               }, -        { NFS3ERR_ROFS,         "Read-only file system"                 }, -        { NFS3ERR_MLINK,        "Too many hard links"                   }, -        { NFS3ERR_NAMETOOLONG,  "Filename in operation was too long"    }, -        { NFS3ERR_NOTEMPTY,     "Directory not empty"                   }, -        { NFS3ERR_DQUOT,        "Resource (quota) hard limit exceeded"  }, -        { NFS3ERR_STALE,        "Invalid file handle"                   }, -        { NFS3ERR_REMOTE,       "Too many levels of remote in path"     }, -        { NFS3ERR_BADHANDLE,    "Illegal NFS file handle"               }, -        { NFS3ERR_NOT_SYNC,     "Update synchronization mismatch detected" }, -        { NFS3ERR_BAD_COOKIE,   "READDIR or READDIRPLUS cookie is stale"}, -        { NFS3ERR_NOTSUPP,      "Operation is not supported"            }, -        { NFS3ERR_TOOSMALL,     "Buffer or request is too small"        }, -        { NFS3ERR_SERVERFAULT,  "Error occurred on the server or IO Error" }, -        { NFS3ERR_BADTYPE,      "Type not supported by the server"      }, -        { NFS3ERR_JUKEBOX,      "Cannot complete server initiated request" }, -        { NFS3ERR_END_OF_LIST,  "IO Error"                              }, +    {NFS3_OK, "Call completed successfully."}, +    {NFS3ERR_PERM, "Not owner"}, +    {NFS3ERR_NOENT, "No such file or directory"}, +    {NFS3ERR_IO, "I/O error"}, +    {NFS3ERR_NXIO, "I/O error"}, +    {NFS3ERR_ACCES, "Permission denied"}, +    {NFS3ERR_EXIST, "File exists"}, +    {NFS3ERR_XDEV, "Attempt to do a cross-device hard link"}, +    {NFS3ERR_NODEV, "No such device"}, +    {NFS3ERR_NOTDIR, "Not a directory"}, +    {NFS3ERR_ISDIR, "Is a directory"}, +    {NFS3ERR_INVAL, "Invalid argument for operation"}, +    {NFS3ERR_FBIG, "File too large"}, +    {NFS3ERR_NOSPC, "No space left on device"}, +    {NFS3ERR_ROFS, "Read-only file system"}, +    {NFS3ERR_MLINK, "Too many hard links"}, +    {NFS3ERR_NAMETOOLONG, "Filename in operation was too long"}, +    {NFS3ERR_NOTEMPTY, "Directory not empty"}, +    {NFS3ERR_DQUOT, "Resource (quota) hard limit exceeded"}, +    {NFS3ERR_STALE, "Invalid file handle"}, +    {NFS3ERR_REMOTE, "Too many levels of remote in path"}, +    {NFS3ERR_BADHANDLE, "Illegal NFS file handle"}, +    {NFS3ERR_NOT_SYNC, "Update synchronization mismatch detected"}, +    {NFS3ERR_BAD_COOKIE, "READDIR or READDIRPLUS cookie is stale"}, +    {NFS3ERR_NOTSUPP, "Operation is not supported"}, +    {NFS3ERR_TOOSMALL, "Buffer or request is too small"}, +    {NFS3ERR_SERVERFAULT, "Error occurred on the server or IO Error"}, +    {NFS3ERR_BADTYPE, "Type not supported by the server"}, +    {NFS3ERR_JUKEBOX, "Cannot complete server initiated request"}, +    {NFS3ERR_END_OF_LIST, "IO Error"},  }; -  uint64_t -nfs3_iatt_gfid_to_ino (struct iatt *buf) +nfs3_iatt_gfid_to_ino(struct iatt *buf)  { -        uint64_t ino  = 0; +    uint64_t ino = 0; -        if (!buf) -                return 0; +    if (!buf) +        return 0; -        if (gf_nfs_enable_ino32()) { -                ino = (uint32_t )nfs_hash_gfid (buf->ia_gfid); -                goto hashout; -        } +    if (gf_nfs_enable_ino32()) { +        ino = (uint32_t)nfs_hash_gfid(buf->ia_gfid); +        goto hashout; +    } -        /* from posix its guaranteed to send unique ino */ -        ino = buf->ia_ino; +    /* from posix its guaranteed to send unique ino */ +    ino = buf->ia_ino;  hashout: -        return ino; +    return ino;  } -  void -nfs3_map_deviceid_to_statdev (struct iatt *ia, uint64_t deviceid) +nfs3_map_deviceid_to_statdev(struct iatt *ia, uint64_t deviceid)  { -        if (!ia) -                return; +    if (!ia) +        return; -        ia->ia_dev = deviceid; +    ia->ia_dev = deviceid;  } -  struct nfs3_fh -nfs3_extract_nfs3_fh (nfs_fh3 fh) +nfs3_extract_nfs3_fh(nfs_fh3 fh)  { -        struct nfs3_fh          gfh; +    struct nfs3_fh gfh; -        memcpy (&gfh, fh.data.data_val, fh.data.data_len); -        return gfh; +    memcpy(&gfh, fh.data.data_val, fh.data.data_len); +    return gfh;  } -  struct nfs3_fh -nfs3_extract_lookup_fh (lookup3args *args) +nfs3_extract_lookup_fh(lookup3args *args)  { -        return nfs3_extract_nfs3_fh(args->what.dir); +    return nfs3_extract_nfs3_fh(args->what.dir);  } -  char * -nfs3_extract_lookup_name (lookup3args *args) +nfs3_extract_lookup_name(lookup3args *args)  { -        return args->what.name; +    return args->what.name;  } -  nfsstat3 -nfs3_errno_to_nfsstat3 (int errnum) +nfs3_errno_to_nfsstat3(int errnum)  { -        nfsstat3        stat = NFS3_OK; - -        switch (errnum) { +    nfsstat3 stat = NFS3_OK; +    switch (errnum) {          case 0: -                stat = NFS3_OK; -                break; +            stat = NFS3_OK; +            break;          case EPERM: -                stat = NFS3ERR_PERM; -                break; +            stat = NFS3ERR_PERM; +            break;          case ENOENT: -                stat = NFS3ERR_NOENT; -                break; +            stat = NFS3ERR_NOENT; +            break;          case EACCES: -                stat = NFS3ERR_ACCES; -                break; +            stat = NFS3ERR_ACCES; +            break;          case EEXIST: -                stat = NFS3ERR_EXIST; -                break; +            stat = NFS3ERR_EXIST; +            break;          case EXDEV: -                stat = NFS3ERR_XDEV; -                break; +            stat = NFS3ERR_XDEV; +            break;          case ENODEV: -                stat = NFS3ERR_NODEV; -                break; +            stat = NFS3ERR_NODEV; +            break;          case EIO: -                stat = NFS3ERR_IO; -                break; +            stat = NFS3ERR_IO; +            break;          case ENXIO: -                stat = NFS3ERR_NXIO; -                break; +            stat = NFS3ERR_NXIO; +            break;          case ENOTDIR: -                stat = NFS3ERR_NOTDIR; -                break; +            stat = NFS3ERR_NOTDIR; +            break;          case EISDIR: -                stat = NFS3ERR_ISDIR; -                break; +            stat = NFS3ERR_ISDIR; +            break;          case EINVAL: -                stat = NFS3ERR_INVAL; -                break; +            stat = NFS3ERR_INVAL; +            break;          case ENOSPC: -                stat = NFS3ERR_NOSPC; -                break; +            stat = NFS3ERR_NOSPC; +            break;          case EROFS: -                stat = NFS3ERR_ROFS; -                break; +            stat = NFS3ERR_ROFS; +            break;          case EFBIG: -                stat = NFS3ERR_FBIG; -                break; +            stat = NFS3ERR_FBIG; +            break;          case EMLINK: -                stat = NFS3ERR_MLINK; -                break; +            stat = NFS3ERR_MLINK; +            break;          case ENAMETOOLONG: -                stat = NFS3ERR_NAMETOOLONG; -                break; +            stat = NFS3ERR_NAMETOOLONG; +            break;          case ENOTEMPTY: -                stat = NFS3ERR_NOTEMPTY; -                break; +            stat = NFS3ERR_NOTEMPTY; +            break;          case EFAULT: -                stat = NFS3ERR_SERVERFAULT; -                break; +            stat = NFS3ERR_SERVERFAULT; +            break;          case ENOTSUP:          case ENOSYS: -                stat = NFS3ERR_NOTSUPP; -                break; +            stat = NFS3ERR_NOTSUPP; +            break;          case EBADF: -                stat = NFS3ERR_BADTYPE; -                break; +            stat = NFS3ERR_BADTYPE; +            break;          case ESTALE: -                stat = NFS3ERR_STALE; -                break; +            stat = NFS3ERR_STALE; +            break;          case ENOTCONN: -                stat = NFS3ERR_IO; -                break; +            stat = NFS3ERR_IO; +            break;          case EDQUOT: -                stat = NFS3ERR_DQUOT; -                break; +            stat = NFS3ERR_DQUOT; +            break;          default: -                stat = NFS3ERR_SERVERFAULT; -                break; -        } +            stat = NFS3ERR_SERVERFAULT; +            break; +    } -        return stat; +    return stat;  }  /* @@ -260,3681 +251,3581 @@ nfs3_errno_to_nfsstat3 (int errnum)   * happens by any means, then set NFS3 status to NFS3ERR_SERVERFAULT.   */  nfsstat3 -nfs3_cbk_errno_status (int32_t op_ret, int32_t op_errno) +nfs3_cbk_errno_status(int32_t op_ret, int32_t op_errno)  { -        if ((op_ret == -1) && (op_errno == 0)) { -                return NFS3ERR_SERVERFAULT; -        } +    if ((op_ret == -1) && (op_errno == 0)) { +        return NFS3ERR_SERVERFAULT; +    } -        return nfs3_errno_to_nfsstat3 (op_errno); +    return nfs3_errno_to_nfsstat3(op_errno);  }  void -nfs3_fill_lookup3res_error (lookup3res *res, nfsstat3 stat, -                            struct iatt *dirstat) +nfs3_fill_lookup3res_error(lookup3res *res, nfsstat3 stat, struct iatt *dirstat)  { - -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (!dirstat) { -                res->lookup3res_u.resfail.dir_attributes.attributes_follow = FALSE; -        } - +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (!dirstat) { +        res->lookup3res_u.resfail.dir_attributes.attributes_follow = FALSE; +    }  }  void -nfs3_stat_to_fattr3 (struct iatt *buf, fattr3 *fa) +nfs3_stat_to_fattr3(struct iatt *buf, fattr3 *fa)  { -        if (buf == NULL || fa == NULL) { -                errno = EINVAL; -                return; -        } - -        if (IA_ISDIR (buf->ia_type)) -                fa->type = NF3DIR; -        else if (IA_ISREG (buf->ia_type)) -                fa->type = NF3REG; -        else if (IA_ISCHR (buf->ia_type)) -                fa->type = NF3CHR; -        else if (IA_ISBLK (buf->ia_type)) -                fa->type = NF3BLK; -        else if (IA_ISFIFO (buf->ia_type)) -                fa->type = NF3FIFO; -        else if (IA_ISLNK (buf->ia_type)) -                fa->type = NF3LNK; -        else if (IA_ISSOCK (buf->ia_type)) -                fa->type = NF3SOCK; - -        if (IA_PROT_RUSR (buf->ia_prot)) -                fa->mode |= NFS3MODE_ROWNER; -        if (IA_PROT_WUSR (buf->ia_prot)) -                fa->mode |= NFS3MODE_WOWNER; -        if (IA_PROT_XUSR (buf->ia_prot)) -                fa->mode |= NFS3MODE_XOWNER; - -        if (IA_PROT_RGRP (buf->ia_prot)) -                fa->mode |= NFS3MODE_RGROUP; -        if (IA_PROT_WGRP (buf->ia_prot)) -                fa->mode |= NFS3MODE_WGROUP; -        if (IA_PROT_XGRP (buf->ia_prot)) -                fa->mode |= NFS3MODE_XGROUP; - -        if (IA_PROT_ROTH (buf->ia_prot)) -                fa->mode |= NFS3MODE_ROTHER; -        if (IA_PROT_WOTH (buf->ia_prot)) -                fa->mode |= NFS3MODE_WOTHER; -        if (IA_PROT_XOTH (buf->ia_prot)) -                fa->mode |= NFS3MODE_XOTHER; - -        if (IA_PROT_SUID (buf->ia_prot)) -                fa->mode |= NFS3MODE_SETXUID; -        if (IA_PROT_SGID (buf->ia_prot)) -                fa->mode |= NFS3MODE_SETXGID; -        if (IA_PROT_STCKY (buf->ia_prot)) -                fa->mode |= NFS3MODE_SAVESWAPTXT; - -        fa->nlink = buf->ia_nlink; -        fa->uid = buf->ia_uid; -        fa->gid = buf->ia_gid; -        fa->size = buf->ia_size; -        fa->used = (buf->ia_blocks * 512); - -        if ((IA_ISCHR (buf->ia_type) || IA_ISBLK (buf->ia_type))) { -                fa->rdev.specdata1 = ia_major (buf->ia_rdev); -                fa->rdev.specdata2 = ia_minor (buf->ia_rdev); -        } else { -                fa->rdev.specdata1 = 0; -                fa->rdev.specdata2 = 0; -        } - -        fa->fsid = buf->ia_dev; -        fa->fileid = nfs3_iatt_gfid_to_ino (buf); - -        fa->atime.seconds = buf->ia_atime; -        fa->atime.nseconds = buf->ia_atime_nsec; - -        fa->ctime.seconds = buf->ia_ctime; -        fa->ctime.nseconds = buf->ia_ctime_nsec; - -        fa->mtime.seconds = buf->ia_mtime; -        fa->mtime.nseconds = buf->ia_mtime_nsec; +    if (buf == NULL || fa == NULL) { +        errno = EINVAL; +        return; +    } + +    if (IA_ISDIR(buf->ia_type)) +        fa->type = NF3DIR; +    else if (IA_ISREG(buf->ia_type)) +        fa->type = NF3REG; +    else if (IA_ISCHR(buf->ia_type)) +        fa->type = NF3CHR; +    else if (IA_ISBLK(buf->ia_type)) +        fa->type = NF3BLK; +    else if (IA_ISFIFO(buf->ia_type)) +        fa->type = NF3FIFO; +    else if (IA_ISLNK(buf->ia_type)) +        fa->type = NF3LNK; +    else if (IA_ISSOCK(buf->ia_type)) +        fa->type = NF3SOCK; + +    if (IA_PROT_RUSR(buf->ia_prot)) +        fa->mode |= NFS3MODE_ROWNER; +    if (IA_PROT_WUSR(buf->ia_prot)) +        fa->mode |= NFS3MODE_WOWNER; +    if (IA_PROT_XUSR(buf->ia_prot)) +        fa->mode |= NFS3MODE_XOWNER; + +    if (IA_PROT_RGRP(buf->ia_prot)) +        fa->mode |= NFS3MODE_RGROUP; +    if (IA_PROT_WGRP(buf->ia_prot)) +        fa->mode |= NFS3MODE_WGROUP; +    if (IA_PROT_XGRP(buf->ia_prot)) +        fa->mode |= NFS3MODE_XGROUP; + +    if (IA_PROT_ROTH(buf->ia_prot)) +        fa->mode |= NFS3MODE_ROTHER; +    if (IA_PROT_WOTH(buf->ia_prot)) +        fa->mode |= NFS3MODE_WOTHER; +    if (IA_PROT_XOTH(buf->ia_prot)) +        fa->mode |= NFS3MODE_XOTHER; + +    if (IA_PROT_SUID(buf->ia_prot)) +        fa->mode |= NFS3MODE_SETXUID; +    if (IA_PROT_SGID(buf->ia_prot)) +        fa->mode |= NFS3MODE_SETXGID; +    if (IA_PROT_STCKY(buf->ia_prot)) +        fa->mode |= NFS3MODE_SAVESWAPTXT; + +    fa->nlink = buf->ia_nlink; +    fa->uid = buf->ia_uid; +    fa->gid = buf->ia_gid; +    fa->size = buf->ia_size; +    fa->used = (buf->ia_blocks * 512); + +    if ((IA_ISCHR(buf->ia_type) || IA_ISBLK(buf->ia_type))) { +        fa->rdev.specdata1 = ia_major(buf->ia_rdev); +        fa->rdev.specdata2 = ia_minor(buf->ia_rdev); +    } else { +        fa->rdev.specdata1 = 0; +        fa->rdev.specdata2 = 0; +    } + +    fa->fsid = buf->ia_dev; +    fa->fileid = nfs3_iatt_gfid_to_ino(buf); + +    fa->atime.seconds = buf->ia_atime; +    fa->atime.nseconds = buf->ia_atime_nsec; + +    fa->ctime.seconds = buf->ia_ctime; +    fa->ctime.nseconds = buf->ia_ctime_nsec; + +    fa->mtime.seconds = buf->ia_mtime; +    fa->mtime.nseconds = buf->ia_mtime_nsec;  } -  post_op_attr -nfs3_stat_to_post_op_attr (struct iatt *buf) +nfs3_stat_to_post_op_attr(struct iatt *buf)  { -        post_op_attr    attr = {0, }; -        if (!buf) -                return attr; +    post_op_attr attr = { +        0, +    }; +    if (!buf) +        return attr; -        /* Some performance translators return zero-filled stats when they -         * do not have up-to-date attributes. Need to handle this by not -         * returning these zeroed out attrs. -         */ -        attr.attributes_follow = FALSE; -        if (gf_is_zero_filled_stat (buf)) -                goto out; +    /* Some performance translators return zero-filled stats when they +     * do not have up-to-date attributes. Need to handle this by not +     * returning these zeroed out attrs. +     */ +    attr.attributes_follow = FALSE; +    if (gf_is_zero_filled_stat(buf)) +        goto out; -        nfs3_stat_to_fattr3 (buf, &(attr.post_op_attr_u.attributes)); -        attr.attributes_follow = TRUE; +    nfs3_stat_to_fattr3(buf, &(attr.post_op_attr_u.attributes)); +    attr.attributes_follow = TRUE;  out: -        return attr; +    return attr;  } -  pre_op_attr -nfs3_stat_to_pre_op_attr (struct iatt *pre) -{ -        pre_op_attr     poa = {0, }; - -        /* Some performance translators return zero-filled stats when they -         * do not have up-to-date attributes. Need to handle this by not -         * returning these zeroed out attrs. -         */ -        poa.attributes_follow = FALSE; -        if (gf_is_zero_filled_stat (pre)) -                goto out; - -        poa.attributes_follow = TRUE; -        poa.pre_op_attr_u.attributes.size = pre->ia_size; -        poa.pre_op_attr_u.attributes.mtime.seconds = pre->ia_mtime; -        poa.pre_op_attr_u.attributes.mtime.nseconds = pre->ia_mtime_nsec; -        poa.pre_op_attr_u.attributes.ctime.seconds = pre->ia_ctime; -        poa.pre_op_attr_u.attributes.ctime.nseconds = pre->ia_ctime_nsec; +nfs3_stat_to_pre_op_attr(struct iatt *pre) +{ +    pre_op_attr poa = { +        0, +    }; + +    /* Some performance translators return zero-filled stats when they +     * do not have up-to-date attributes. Need to handle this by not +     * returning these zeroed out attrs. +     */ +    poa.attributes_follow = FALSE; +    if (gf_is_zero_filled_stat(pre)) +        goto out; + +    poa.attributes_follow = TRUE; +    poa.pre_op_attr_u.attributes.size = pre->ia_size; +    poa.pre_op_attr_u.attributes.mtime.seconds = pre->ia_mtime; +    poa.pre_op_attr_u.attributes.mtime.nseconds = pre->ia_mtime_nsec; +    poa.pre_op_attr_u.attributes.ctime.seconds = pre->ia_ctime; +    poa.pre_op_attr_u.attributes.ctime.nseconds = pre->ia_ctime_nsec;  out: -        return poa; +    return poa;  }  void -nfs3_fill_lookup3res_success (lookup3res *res, nfsstat3 stat, -                              struct nfs3_fh *fh, struct iatt *buf, -                              struct iatt *postparent) +nfs3_fill_lookup3res_success(lookup3res *res, nfsstat3 stat, struct nfs3_fh *fh, +                             struct iatt *buf, struct iatt *postparent)  { -        post_op_attr    obj, dir; -        uint32_t        fhlen = 0; +    post_op_attr obj, dir; +    uint32_t fhlen = 0; -        res->status = stat; -        if (fh) { -                res->lookup3res_u.resok.object.data.data_val = (void *)fh; -                fhlen = nfs3_fh_compute_size (); -                res->lookup3res_u.resok.object.data.data_len = fhlen; -        } +    res->status = stat; +    if (fh) { +        res->lookup3res_u.resok.object.data.data_val = (void *)fh; +        fhlen = nfs3_fh_compute_size(); +        res->lookup3res_u.resok.object.data.data_len = fhlen; +    } -        obj.attributes_follow = FALSE; -        dir.attributes_follow = FALSE; -        obj = nfs3_stat_to_post_op_attr (buf); -        dir = nfs3_stat_to_post_op_attr (postparent); +    obj.attributes_follow = FALSE; +    dir.attributes_follow = FALSE; +    obj = nfs3_stat_to_post_op_attr(buf); +    dir = nfs3_stat_to_post_op_attr(postparent); -        res->lookup3res_u.resok.obj_attributes = obj; -        res->lookup3res_u.resok.dir_attributes = dir; +    res->lookup3res_u.resok.obj_attributes = obj; +    res->lookup3res_u.resok.dir_attributes = dir;  } -  void -nfs3_fill_lookup3res (lookup3res *res, nfsstat3 stat, struct nfs3_fh *newfh, -                      struct iatt *buf, struct iatt *postparent, -                      uint64_t deviceid) +nfs3_fill_lookup3res(lookup3res *res, nfsstat3 stat, struct nfs3_fh *newfh, +                     struct iatt *buf, struct iatt *postparent, +                     uint64_t deviceid)  { - -        memset (res, 0, sizeof (*res)); -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        if (stat != NFS3_OK) -                nfs3_fill_lookup3res_error (res, stat, postparent); -        else -                nfs3_fill_lookup3res_success (res, stat, newfh, buf, -                                              postparent); +    memset(res, 0, sizeof(*res)); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    if (stat != NFS3_OK) +        nfs3_fill_lookup3res_error(res, stat, postparent); +    else +        nfs3_fill_lookup3res_success(res, stat, newfh, buf, postparent);  }  struct nfs3_fh -nfs3_extract_getattr_fh (getattr3args *args) +nfs3_extract_getattr_fh(getattr3args *args)  { -        return nfs3_extract_nfs3_fh(args->object); +    return nfs3_extract_nfs3_fh(args->object);  } -  void -nfs3_fill_getattr3res (getattr3res *res, nfsstat3 stat, struct iatt *buf, -                       uint64_t deviceid) +nfs3_fill_getattr3res(getattr3res *res, nfsstat3 stat, struct iatt *buf, +                      uint64_t deviceid)  { +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; - -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        nfs3_stat_to_fattr3 (buf, &(res->getattr3res_u.resok.obj_attributes)); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    nfs3_stat_to_fattr3(buf, &(res->getattr3res_u.resok.obj_attributes));  } -  struct nfs3_fh -nfs3_extract_fsinfo_fh (fsinfo3args *args) +nfs3_extract_fsinfo_fh(fsinfo3args *args)  { -        return nfs3_extract_nfs3_fh (args->fsroot); +    return nfs3_extract_nfs3_fh(args->fsroot);  } -  void -nfs3_fill_fsinfo3res (struct nfs3_state *nfs3, fsinfo3res *res, -                      nfsstat3 status, struct iatt *fsroot, uint64_t deviceid) +nfs3_fill_fsinfo3res(struct nfs3_state *nfs3, fsinfo3res *res, nfsstat3 status, +                     struct iatt *fsroot, uint64_t deviceid)  { -        fsinfo3resok    resok = {{0}, }; -        nfstime3        tdelta = GF_NFS3_TIMEDELTA_SECS; +    fsinfo3resok resok = { +        {0}, +    }; +    nfstime3 tdelta = GF_NFS3_TIMEDELTA_SECS; -        memset (res, 0, sizeof (*res)); -        res->status = status; -        if (status != NFS3_OK) -                return; - -        nfs3_map_deviceid_to_statdev (fsroot, deviceid); -        resok.obj_attributes = nfs3_stat_to_post_op_attr (fsroot); -        resok.rtmax = nfs3->readsize; -        resok.rtpref = nfs3->readsize; -        resok.rtmult = GF_NFS3_RTMULT; -        resok.wtmax = nfs3->writesize; -        resok.wtpref = nfs3->writesize; -        resok.wtmult = GF_NFS3_WTMULT; -        resok.dtpref = nfs3->readdirsize; -        resok.maxfilesize = GF_NFS3_MAXFILESIZE; -        resok.time_delta = tdelta; -        resok.properties = GF_NFS3_FS_PROP; +    memset(res, 0, sizeof(*res)); +    res->status = status; +    if (status != NFS3_OK) +        return; -        res->fsinfo3res_u.resok = resok; +    nfs3_map_deviceid_to_statdev(fsroot, deviceid); +    resok.obj_attributes = nfs3_stat_to_post_op_attr(fsroot); +    resok.rtmax = nfs3->readsize; +    resok.rtpref = nfs3->readsize; +    resok.rtmult = GF_NFS3_RTMULT; +    resok.wtmax = nfs3->writesize; +    resok.wtpref = nfs3->writesize; +    resok.wtmult = GF_NFS3_WTMULT; +    resok.dtpref = nfs3->readdirsize; +    resok.maxfilesize = GF_NFS3_MAXFILESIZE; +    resok.time_delta = tdelta; +    resok.properties = GF_NFS3_FS_PROP; +    res->fsinfo3res_u.resok = resok;  } -  void -nfs3_prep_lookup3args (lookup3args *args, struct nfs3_fh *fh, char *name) +nfs3_prep_lookup3args(lookup3args *args, struct nfs3_fh *fh, char *name)  { -        memset (args, 0, sizeof (*args)); -        args->what.dir.data.data_val = (void *)fh; -        args->what.name = name; +    memset(args, 0, sizeof(*args)); +    args->what.dir.data.data_val = (void *)fh; +    args->what.name = name;  } -  void -nfs3_prep_getattr3args (getattr3args *args, struct nfs3_fh *fh) +nfs3_prep_getattr3args(getattr3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->object.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->object.data.data_val = (void *)fh;  } -  void -nfs3_prep_fsinfo3args (fsinfo3args *args, struct nfs3_fh *root) +nfs3_prep_fsinfo3args(fsinfo3args *args, struct nfs3_fh *root)  { -        memset (args, 0, sizeof (*args)); -        args->fsroot.data.data_val = (void *)root; +    memset(args, 0, sizeof(*args)); +    args->fsroot.data.data_val = (void *)root;  } -  char *  nfsstat3_strerror(int stat)  { -        int i; -        for(i = 0; nfs3stat_strerror_table[i].stat != NFS3ERR_END_OF_LIST ; i++) { -                if (nfs3stat_strerror_table[i].stat == stat) -                        return nfs3stat_strerror_table[i].strerror; -        } +    int i; +    for (i = 0; nfs3stat_strerror_table[i].stat != NFS3ERR_END_OF_LIST; i++) { +        if (nfs3stat_strerror_table[i].stat == stat) +            return nfs3stat_strerror_table[i].strerror; +    } -        return nfs3stat_strerror_table[i].strerror; +    return nfs3stat_strerror_table[i].strerror;  } - -  void -nfs3_prep_access3args (access3args *args, struct nfs3_fh *fh) +nfs3_prep_access3args(access3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->object.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->object.data.data_val = (void *)fh;  } -#define POSIX_READ      4 -#define POSIX_WRITE     2 -#define POSIX_EXEC      1 +#define POSIX_READ 4 +#define POSIX_WRITE 2 +#define POSIX_EXEC 1  uint32_t -nfs3_accessbits (int32_t accbits) +nfs3_accessbits(int32_t accbits)  { -        uint32_t        accresult = 0; +    uint32_t accresult = 0; -        if (accbits & POSIX_READ) -                accresult |= ACCESS3_READ; +    if (accbits & POSIX_READ) +        accresult |= ACCESS3_READ; -        if (accbits & POSIX_WRITE) -                accresult |= (ACCESS3_MODIFY | ACCESS3_EXTEND | ACCESS3_DELETE); +    if (accbits & POSIX_WRITE) +        accresult |= (ACCESS3_MODIFY | ACCESS3_EXTEND | ACCESS3_DELETE); -        /* lookup on directory allowed only in case of execute permission */ -        if (accbits & POSIX_EXEC) -                accresult |= (ACCESS3_EXECUTE | ACCESS3_LOOKUP); +    /* lookup on directory allowed only in case of execute permission */ +    if (accbits & POSIX_EXEC) +        accresult |= (ACCESS3_EXECUTE | ACCESS3_LOOKUP); -        return accresult; +    return accresult;  }  uint32_t -nfs3_request_to_accessbits (int32_t accbits) +nfs3_request_to_accessbits(int32_t accbits)  { -        uint32_t        acc_request = 0; +    uint32_t acc_request = 0; -        if (accbits & ACCESS3_READ) -                acc_request |= POSIX_READ; +    if (accbits & ACCESS3_READ) +        acc_request |= POSIX_READ; -        if (accbits & (ACCESS3_MODIFY | ACCESS3_EXTEND | ACCESS3_DELETE)) -                acc_request |= POSIX_WRITE; +    if (accbits & (ACCESS3_MODIFY | ACCESS3_EXTEND | ACCESS3_DELETE)) +        acc_request |= POSIX_WRITE; -        /* For lookup on directory check for execute permission */ -        if (accbits & (ACCESS3_EXECUTE | ACCESS3_LOOKUP)) -                acc_request |= POSIX_EXEC; +    /* For lookup on directory check for execute permission */ +    if (accbits & (ACCESS3_EXECUTE | ACCESS3_LOOKUP)) +        acc_request |= POSIX_EXEC; -        return acc_request; +    return acc_request;  }  void -nfs3_fill_access3res (access3res *res, nfsstat3 status, int32_t accbits, -		      int32_t reqaccbits) +nfs3_fill_access3res(access3res *res, nfsstat3 status, int32_t accbits, +                     int32_t reqaccbits)  { -        uint32_t        accres = 0; +    uint32_t accres = 0; -        memset (res, 0, sizeof (*res)); -        res->status = status; -        if (status != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = status; +    if (status != NFS3_OK) +        return; -        accres = nfs3_accessbits (accbits); +    accres = nfs3_accessbits(accbits); -	/* do not answer what was not asked */ -        res->access3res_u.resok.access = accres & reqaccbits; +    /* do not answer what was not asked */ +    res->access3res_u.resok.access = accres & reqaccbits;  }  void -nfs3_prep_readdir3args (readdir3args *ra, struct nfs3_fh *fh) +nfs3_prep_readdir3args(readdir3args *ra, struct nfs3_fh *fh)  { -        memset (ra, 0, sizeof (*ra)); -        ra->dir.data.data_val = (void *)fh; +    memset(ra, 0, sizeof(*ra)); +    ra->dir.data.data_val = (void *)fh;  } -  int -nfs3_is_dot_entry (char *entry) +nfs3_is_dot_entry(char *entry)  { -        int     ret = 0; +    int ret = 0; -        if (!entry) -                return 0; +    if (!entry) +        return 0; -        if (strcmp (entry, ".") == 0) -                ret = 1; +    if (strcmp(entry, ".") == 0) +        ret = 1; -        return ret; +    return ret;  } -  int -nfs3_is_parentdir_entry (char *entry) +nfs3_is_parentdir_entry(char *entry)  { -        int     ret = 0; +    int ret = 0; -        if (!entry) -                return 0; +    if (!entry) +        return 0; -        if (strcmp (entry, "..") == 0) -                ret = 1; +    if (strcmp(entry, "..") == 0) +        ret = 1; -        return ret; +    return ret;  } -  void -nfs3_funge_root_dotdot_dirent (gf_dirent_t *ent, struct nfs3_fh *dfh) +nfs3_funge_root_dotdot_dirent(gf_dirent_t *ent, struct nfs3_fh *dfh)  { -        if ((!ent) || (!dfh)) -                return; - -        if (nfs3_fh_is_root_fh (dfh) && -            nfs3_is_parentdir_entry (ent->d_name)) { -                ent->d_ino = 1; -                ent->d_stat.ia_ino = 1; -        } +    if ((!ent) || (!dfh)) +        return; -        if (nfs3_fh_is_root_fh (dfh) && -            nfs3_is_dot_entry (ent->d_name)) { -                ent->d_ino = 1; -                ent->d_stat.ia_ino = 1; -        } +    if (nfs3_fh_is_root_fh(dfh) && nfs3_is_parentdir_entry(ent->d_name)) { +        ent->d_ino = 1; +        ent->d_stat.ia_ino = 1; +    } +    if (nfs3_fh_is_root_fh(dfh) && nfs3_is_dot_entry(ent->d_name)) { +        ent->d_ino = 1; +        ent->d_stat.ia_ino = 1; +    }  } -  entry3 * -nfs3_fill_entry3 (gf_dirent_t *entry, struct nfs3_fh *dfh) -{ -        entry3          *ent = NULL; -        int              name_len = 0; -        if ((!entry) || (!dfh)) -                return NULL; - -        ent = GF_CALLOC (1, sizeof (*ent), gf_nfs_mt_entry3); -        if (!ent) -                return NULL; - -        gf_msg_trace (GF_NFS3, 0, "Entry: %s", entry->d_name); - -        /* If the entry is . or .., we need to replace the physical ino and gen -         * with 1 and 0 respectively if the directory is root. This funging is -         * needed because there is no parent directory of the root. In that -         * sense the behavior we provide is similar to the output of the -         * command: "stat /.." -         */ -        entry->d_ino = nfs3_iatt_gfid_to_ino (&entry->d_stat); -        nfs3_funge_root_dotdot_dirent (entry, dfh); -        ent->fileid = entry->d_ino; -        ent->cookie = entry->d_off; -        name_len = strlen(entry->d_name); -        ent->name = GF_MALLOC (name_len + 1, gf_nfs_mt_char); -        if (!ent->name) { -                GF_FREE (ent); -                ent = NULL; -                goto err; -        } -        strcpy (ent->name, entry->d_name); -        ent->name[name_len] = '\0'; +nfs3_fill_entry3(gf_dirent_t *entry, struct nfs3_fh *dfh) +{ +    entry3 *ent = NULL; +    int name_len = 0; +    if ((!entry) || (!dfh)) +        return NULL; + +    ent = GF_CALLOC(1, sizeof(*ent), gf_nfs_mt_entry3); +    if (!ent) +        return NULL; + +    gf_msg_trace(GF_NFS3, 0, "Entry: %s", entry->d_name); + +    /* If the entry is . or .., we need to replace the physical ino and gen +     * with 1 and 0 respectively if the directory is root. This funging is +     * needed because there is no parent directory of the root. In that +     * sense the behavior we provide is similar to the output of the +     * command: "stat /.." +     */ +    entry->d_ino = nfs3_iatt_gfid_to_ino(&entry->d_stat); +    nfs3_funge_root_dotdot_dirent(entry, dfh); +    ent->fileid = entry->d_ino; +    ent->cookie = entry->d_off; +    name_len = strlen(entry->d_name); +    ent->name = GF_MALLOC(name_len + 1, gf_nfs_mt_char); +    if (!ent->name) { +        GF_FREE(ent); +        ent = NULL; +        goto err; +    } +    strcpy(ent->name, entry->d_name); +    ent->name[name_len] = '\0';  err: -        return ent; +    return ent;  } -  void -nfs3_fill_post_op_fh3 (struct nfs3_fh *fh, post_op_fh3 *pfh) +nfs3_fill_post_op_fh3(struct nfs3_fh *fh, post_op_fh3 *pfh)  { -        uint32_t        fhlen = 0; +    uint32_t fhlen = 0; -        if ((!fh) || (!pfh)) -                return; +    if ((!fh) || (!pfh)) +        return; -        pfh->handle_follows = 1; -        fhlen = nfs3_fh_compute_size (); -        pfh->post_op_fh3_u.handle.data.data_val = (void *)fh; -        pfh->post_op_fh3_u.handle.data.data_len = fhlen; +    pfh->handle_follows = 1; +    fhlen = nfs3_fh_compute_size(); +    pfh->post_op_fh3_u.handle.data.data_val = (void *)fh; +    pfh->post_op_fh3_u.handle.data.data_len = fhlen;  } -  post_op_fh3 -nfs3_fh_to_post_op_fh3 (struct nfs3_fh *fh) +nfs3_fh_to_post_op_fh3(struct nfs3_fh *fh)  { -        post_op_fh3     pfh = {0, }; -        char            *fhp = NULL; +    post_op_fh3 pfh = { +        0, +    }; +    char *fhp = NULL; -        if (!fh) -                return pfh; - -        pfh.handle_follows = 1; +    if (!fh) +        return pfh; -        fhp = GF_MALLOC (sizeof (*fh), gf_nfs_mt_char); -        if (!fhp) -                return pfh; +    pfh.handle_follows = 1; -        memcpy (fhp, fh, sizeof (*fh)); -        nfs3_fill_post_op_fh3 ((struct nfs3_fh *)fhp, &pfh); +    fhp = GF_MALLOC(sizeof(*fh), gf_nfs_mt_char); +    if (!fhp)          return pfh; -} +    memcpy(fhp, fh, sizeof(*fh)); +    nfs3_fill_post_op_fh3((struct nfs3_fh *)fhp, &pfh); +    return pfh; +}  entryp3 * -nfs3_fill_entryp3 (gf_dirent_t *entry, struct nfs3_fh *dirfh, uint64_t devid) +nfs3_fill_entryp3(gf_dirent_t *entry, struct nfs3_fh *dirfh, uint64_t devid) +{ +    entryp3 *ent = NULL; +    struct nfs3_fh newfh = { +        {0}, +    }; +    int name_len = 0; + +    if ((!entry) || (!dirfh)) +        return NULL; + +    /* If the entry is . or .., we need to replace the physical ino and gen +     * with 1 and 0 respectively if the directory is root. This funging is +     * needed because there is no parent directory of the root. In that +     * sense the behavior we provide is similar to the output of the +     * command: "stat /.." +     */ +    entry->d_ino = nfs3_iatt_gfid_to_ino(&entry->d_stat); +    nfs3_funge_root_dotdot_dirent(entry, dirfh); +    gf_msg_trace(GF_NFS3, 0, "Entry: %s, ino: %" PRIu64, entry->d_name, +                 entry->d_ino); +    ent = GF_CALLOC(1, sizeof(*ent), gf_nfs_mt_entryp3); +    if (!ent) +        return NULL; + +    ent->fileid = entry->d_ino; +    ent->cookie = entry->d_off; +    name_len = strlen(entry->d_name); +    ent->name = GF_MALLOC(name_len + 1, gf_nfs_mt_char); +    if (!ent->name) { +        GF_FREE(ent); +        ent = NULL; +        goto err; +    } +    strcpy(ent->name, entry->d_name); +    ent->name[name_len] = '\0'; + +    nfs3_fh_build_child_fh(dirfh, &entry->d_stat, &newfh); +    nfs3_map_deviceid_to_statdev(&entry->d_stat, devid); +    /* * +     * In tier volume, the readdirp send only to cold subvol +     * which will populate in the 'T' file entries in the result. +     * For such files an explicit stat call is required, by setting +     * following argument client will perform the same. +     * +     * The inode value for 'T' files and directory is NULL, so just +     * skip the check if it is directory. +     */ +    if (!(IA_ISDIR(entry->d_stat.ia_type)) && (entry->inode == NULL)) +        ent->name_attributes.attributes_follow = FALSE; +    else +        ent->name_attributes = nfs3_stat_to_post_op_attr(&entry->d_stat); + +    ent->name_handle = nfs3_fh_to_post_op_fh3(&newfh); +err: +    return ent; +} + +void +nfs3_fill_readdir3res(readdir3res *res, nfsstat3 stat, struct nfs3_fh *dirfh, +                      uint64_t cverf, struct iatt *dirstat, +                      gf_dirent_t *entries, count3 count, int is_eof, +                      uint64_t deviceid)  { -        entryp3         *ent = NULL; -        struct nfs3_fh  newfh = {{0}, }; -        int             name_len = 0; +    post_op_attr dirattr; +    entry3 *ent = NULL; +    entry3 *headentry = NULL; +    entry3 *preventry = NULL; +    count3 filled = 0; +    gf_dirent_t *listhead = NULL; -        if ((!entry) || (!dirfh)) -                return NULL; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        /* If the entry is . or .., we need to replace the physical ino and gen -         * with 1 and 0 respectively if the directory is root. This funging is -         * needed because there is no parent directory of the root. In that -         * sense the behavior we provide is similar to the output of the -         * command: "stat /.." -         */ -        entry->d_ino = nfs3_iatt_gfid_to_ino (&entry->d_stat); -        nfs3_funge_root_dotdot_dirent (entry, dirfh); -        gf_msg_trace (GF_NFS3, 0, "Entry: %s, ino: %"PRIu64, -                      entry->d_name, entry->d_ino); -        ent = GF_CALLOC (1, sizeof (*ent), gf_nfs_mt_entryp3); +    nfs3_map_deviceid_to_statdev(dirstat, deviceid); +    dirattr = nfs3_stat_to_post_op_attr(dirstat); +    res->readdir3res_u.resok.dir_attributes = dirattr; +    res->readdir3res_u.resok.reply.eof = (bool_t)is_eof; +    memcpy(res->readdir3res_u.resok.cookieverf, &cverf, sizeof(cverf)); + +    filled = NFS3_READDIR_RESOK_SIZE; +    /* First entry is just the list head */ +    listhead = entries; +    entries = entries->next; +    while (((entries) && (entries != listhead)) && (filled < count)) { +        /* +        if ((strcmp (entries->d_name, ".") == 0) || +            (strcmp (entries->d_name, "..") == 0)) +                goto nextentry; +                */ +        ent = nfs3_fill_entry3(entries, dirfh);          if (!ent) -                return NULL; - -        ent->fileid = entry->d_ino; -        ent->cookie = entry->d_off; -        name_len = strlen (entry->d_name); -        ent->name = GF_MALLOC (name_len + 1, gf_nfs_mt_char); -        if (!ent->name) { -                GF_FREE (ent); -                ent = NULL; -                goto err; -        } -        strcpy (ent->name, entry->d_name); -        ent->name[name_len] = '\0'; - -        nfs3_fh_build_child_fh (dirfh, &entry->d_stat, &newfh); -        nfs3_map_deviceid_to_statdev (&entry->d_stat, devid); -        /* * -         * In tier volume, the readdirp send only to cold subvol -         * which will populate in the 'T' file entries in the result. -         * For such files an explicit stat call is required, by setting -         * following argument client will perform the same. -         * -         * The inode value for 'T' files and directory is NULL, so just -         * skip the check if it is directory. -         */ -        if (!(IA_ISDIR(entry->d_stat.ia_type)) && (entry->inode == NULL)) -                ent->name_attributes.attributes_follow = FALSE; -        else -                ent->name_attributes = -                        nfs3_stat_to_post_op_attr (&entry->d_stat); +            break; -        ent->name_handle = nfs3_fh_to_post_op_fh3 (&newfh); -err: -        return ent; -} +        if (!headentry) +            headentry = ent; +        if (preventry) { +            preventry->nextentry = ent; +            preventry = ent; +        } else +            preventry = ent; -void -nfs3_fill_readdir3res (readdir3res *res, nfsstat3 stat, struct nfs3_fh *dirfh, -                       uint64_t cverf, struct iatt *dirstat, -                       gf_dirent_t *entries, count3 count, int is_eof, -                       uint64_t deviceid) -{ -        post_op_attr    dirattr; -        entry3          *ent = NULL; -        entry3          *headentry = NULL; -        entry3          *preventry = NULL; -        count3          filled = 0; -        gf_dirent_t     *listhead = NULL; - -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; - -        nfs3_map_deviceid_to_statdev (dirstat, deviceid); -        dirattr = nfs3_stat_to_post_op_attr (dirstat); -        res->readdir3res_u.resok.dir_attributes = dirattr; -        res->readdir3res_u.resok.reply.eof = (bool_t)is_eof; -        memcpy (res->readdir3res_u.resok.cookieverf, &cverf, sizeof (cverf)); - -        filled = NFS3_READDIR_RESOK_SIZE; -        /* First entry is just the list head */ -        listhead = entries; +        filled += NFS3_ENTRY3_FIXED_SIZE + strlen(ent->name); +        // nextentry:          entries = entries->next; -        while (((entries) && (entries != listhead)) && (filled < count)) { -                /* -                if ((strcmp (entries->d_name, ".") == 0) || -                    (strcmp (entries->d_name, "..") == 0)) -                        goto nextentry; -                        */ -                ent = nfs3_fill_entry3 (entries, dirfh); -                if (!ent) -                        break; - -                if (!headentry) -                        headentry = ent; - -                if (preventry) { -                        preventry->nextentry = ent; -                        preventry = ent; -                } else -                        preventry = ent; - -                filled += NFS3_ENTRY3_FIXED_SIZE + strlen (ent->name); -//nextentry: -                entries = entries->next; -        } +    } -        res->readdir3res_u.resok.reply.entries = headentry; +    res->readdir3res_u.resok.reply.entries = headentry; -        return; +    return;  } -  void -nfs3_fill_readdirp3res (readdirp3res *res, nfsstat3 stat, -                        struct nfs3_fh *dirfh, uint64_t cverf, -                        struct iatt *dirstat, gf_dirent_t *entries, -                        count3 dircount, count3 maxcount, int is_eof, -                        uint64_t deviceid) -{ -        post_op_attr    dirattr; -        entryp3         *ent = NULL; -        entryp3         *headentry = NULL; -        entryp3         *preventry = NULL; -        count3          filled = 0; -        gf_dirent_t     *listhead = NULL; -        int             fhlen = 0; +nfs3_fill_readdirp3res(readdirp3res *res, nfsstat3 stat, struct nfs3_fh *dirfh, +                       uint64_t cverf, struct iatt *dirstat, +                       gf_dirent_t *entries, count3 dircount, count3 maxcount, +                       int is_eof, uint64_t deviceid) +{ +    post_op_attr dirattr; +    entryp3 *ent = NULL; +    entryp3 *headentry = NULL; +    entryp3 *preventry = NULL; +    count3 filled = 0; +    gf_dirent_t *listhead = NULL; +    int fhlen = 0; + +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    nfs3_map_deviceid_to_statdev(dirstat, deviceid); +    dirattr = nfs3_stat_to_post_op_attr(dirstat); +    res->readdirp3res_u.resok.dir_attributes = dirattr; +    res->readdirp3res_u.resok.reply.eof = (bool_t)is_eof; +    memcpy(res->readdirp3res_u.resok.cookieverf, &cverf, sizeof(cverf)); + +    filled = NFS3_READDIR_RESOK_SIZE; +    /* First entry is just the list head */ +    listhead = entries; +    entries = entries->next; +    while (((entries) && (entries != listhead)) && (filled < maxcount)) { +        /* Linux does not display . and .. entries unless we provide +         * these entries here. +         */ +        /*                if ((strcmp (entries->d_name, ".") == 0) || +                            (strcmp (entries->d_name, "..") == 0)) +                                goto nextentry; +                                */ +        ent = nfs3_fill_entryp3(entries, dirfh, deviceid); +        if (!ent) +            break; -        nfs3_map_deviceid_to_statdev (dirstat, deviceid); -        dirattr = nfs3_stat_to_post_op_attr (dirstat); -        res->readdirp3res_u.resok.dir_attributes = dirattr; -        res->readdirp3res_u.resok.reply.eof = (bool_t)is_eof; -        memcpy (res->readdirp3res_u.resok.cookieverf, &cverf, sizeof (cverf)); +        if (!headentry) +            headentry = ent; -        filled = NFS3_READDIR_RESOK_SIZE; -        /* First entry is just the list head */ -        listhead = entries; +        if (preventry) { +            preventry->nextentry = ent; +            preventry = ent; +        } else +            preventry = ent; + +        fhlen = ent->name_handle.post_op_fh3_u.handle.data.data_len; +        filled += NFS3_ENTRYP3_FIXED_SIZE + fhlen + strlen(ent->name); +        // nextentry:          entries = entries->next; -        while (((entries) && (entries != listhead)) && (filled < maxcount)) { -                /* Linux does not display . and .. entries unless we provide -                 * these entries here. -                 */ -/*                if ((strcmp (entries->d_name, ".") == 0) || -                    (strcmp (entries->d_name, "..") == 0)) -                        goto nextentry; -                        */ -                ent = nfs3_fill_entryp3 (entries, dirfh, deviceid); -                if (!ent) -                        break; - -                if (!headentry) -                        headentry = ent; - -                if (preventry) { -                        preventry->nextentry = ent; -                        preventry = ent; -                } else -                        preventry = ent; - -                fhlen = ent->name_handle.post_op_fh3_u.handle.data.data_len; -                filled += NFS3_ENTRYP3_FIXED_SIZE + fhlen + strlen (ent->name); -//nextentry: -                entries = entries->next; -        } +    } -        res->readdirp3res_u.resok.reply.entries = headentry; +    res->readdirp3res_u.resok.reply.entries = headentry; -        return; +    return;  } -  void -nfs3_prep_readdirp3args (readdirp3args *ra, struct nfs3_fh *fh) +nfs3_prep_readdirp3args(readdirp3args *ra, struct nfs3_fh *fh)  { -        memset (ra, 0, sizeof (*ra)); -        ra->dir.data.data_val = (void *)fh; +    memset(ra, 0, sizeof(*ra)); +    ra->dir.data.data_val = (void *)fh;  }  void -nfs3_free_readdirp3res (readdirp3res *res) +nfs3_free_readdirp3res(readdirp3res *res)  { -        entryp3 *ent = NULL; -        entryp3 *next = NULL; - -        if (!res) -                return; +    entryp3 *ent = NULL; +    entryp3 *next = NULL; -        ent = res->readdirp3res_u.resok.reply.entries; -        while (ent) { +    if (!res) +        return; -                next = ent->nextentry; -                GF_FREE (ent->name); -                GF_FREE (ent->name_handle.post_op_fh3_u.handle.data.data_val); -                GF_FREE (ent); -                ent = next; -        } +    ent = res->readdirp3res_u.resok.reply.entries; +    while (ent) { +        next = ent->nextentry; +        GF_FREE(ent->name); +        GF_FREE(ent->name_handle.post_op_fh3_u.handle.data.data_val); +        GF_FREE(ent); +        ent = next; +    } -        return; +    return;  } -  void -nfs3_free_readdir3res (readdir3res *res) +nfs3_free_readdir3res(readdir3res *res)  { -        entry3 *ent = NULL; -        entry3 *next = NULL; +    entry3 *ent = NULL; +    entry3 *next = NULL; -        if (!res) -                return; - -        ent = res->readdir3res_u.resok.reply.entries; -        while (ent) { +    if (!res) +        return; -                next = ent->nextentry; -                GF_FREE (ent->name); -                GF_FREE (ent); -                ent = next; -        } +    ent = res->readdir3res_u.resok.reply.entries; +    while (ent) { +        next = ent->nextentry; +        GF_FREE(ent->name); +        GF_FREE(ent); +        ent = next; +    } -        return; +    return;  }  void -nfs3_prep_fsstat3args (fsstat3args *args, struct nfs3_fh *fh) +nfs3_prep_fsstat3args(fsstat3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->fsroot.data.data_val = (char *)fh; +    memset(args, 0, sizeof(*args)); +    args->fsroot.data.data_val = (char *)fh;  } -  void -nfs3_fill_fsstat3res (fsstat3res *res, nfsstat3 stat, struct statvfs *fsbuf, -                      struct iatt *postbuf, uint64_t deviceid) +nfs3_fill_fsstat3res(fsstat3res *res, nfsstat3 stat, struct statvfs *fsbuf, +                     struct iatt *postbuf, uint64_t deviceid)  { -        post_op_attr    poa; -        fsstat3resok    resok; +    post_op_attr poa; +    fsstat3resok resok; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (postbuf, deviceid); -        poa = nfs3_stat_to_post_op_attr (postbuf); -        resok.tbytes = (size3)(fsbuf->f_frsize * fsbuf->f_blocks); -        resok.fbytes = (size3)(fsbuf->f_frsize * fsbuf->f_bfree); -        resok.abytes = (size3)(fsbuf->f_frsize * fsbuf->f_bavail); -        resok.tfiles = (size3)(fsbuf->f_files); -        resok.ffiles = (size3)(fsbuf->f_ffree); -        resok.afiles = (size3)(fsbuf->f_favail); -        resok.invarsec = 0; +    nfs3_map_deviceid_to_statdev(postbuf, deviceid); +    poa = nfs3_stat_to_post_op_attr(postbuf); +    resok.tbytes = (size3)(fsbuf->f_frsize * fsbuf->f_blocks); +    resok.fbytes = (size3)(fsbuf->f_frsize * fsbuf->f_bfree); +    resok.abytes = (size3)(fsbuf->f_frsize * fsbuf->f_bavail); +    resok.tfiles = (size3)(fsbuf->f_files); +    resok.ffiles = (size3)(fsbuf->f_ffree); +    resok.afiles = (size3)(fsbuf->f_favail); +    resok.invarsec = 0; -        resok.obj_attributes = poa; -        res->fsstat3res_u.resok = resok; +    resok.obj_attributes = poa; +    res->fsstat3res_u.resok = resok;  } -  int32_t -nfs3_sattr3_to_setattr_valid (sattr3 *sattr, struct iatt *buf, mode_t *omode) -{ -        int32_t         valid = 0; -        ia_prot_t       prot = {0, }; -        mode_t          mode = 0; - -        if (!sattr) -                return 0; - -        if (sattr->mode.set_it) { -                valid |= GF_SET_ATTR_MODE; - -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_ROWNER) { -                        mode |= S_IRUSR; -                        prot.owner.read = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_WOWNER) { -                        mode |= S_IWUSR; -                        prot.owner.write = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_XOWNER) { -                        mode |= S_IXUSR; -                        prot.owner.exec = 1; -                } - -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_RGROUP) { -                        mode |= S_IRGRP; -                        prot.group.read = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_WGROUP) { -                        mode |= S_IWGRP; -                        prot.group.write = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_XGROUP) { -                        mode |= S_IXGRP; -                        prot.group.exec = 1; -                } - -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_ROTHER) { -                        mode |= S_IROTH; -                        prot.other.read = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_WOTHER) { -                        mode |= S_IWOTH; -                        prot.other.write = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_XOTHER) { -                        mode |= S_IXOTH; -                        prot.other.exec = 1; -                } - -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_SETXUID) { -                        mode |= S_ISUID; -                        prot.suid = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_SETXGID) { -                        mode |= S_ISGID; -                        prot.sgid = 1; -                } -                if (sattr->mode.set_mode3_u.mode & NFS3MODE_SAVESWAPTXT) { -                        mode |= S_ISVTX; -                        prot.sticky = 1; -                } - -                if (buf) -                        buf->ia_prot = prot; -                /* Create fop still requires the old mode_t style argument. */ -                if (omode) -                        *omode = mode; -        } +nfs3_sattr3_to_setattr_valid(sattr3 *sattr, struct iatt *buf, mode_t *omode) +{ +    int32_t valid = 0; +    ia_prot_t prot = { +        0, +    }; +    mode_t mode = 0; -        if (sattr->uid.set_it) { -                valid |= GF_SET_ATTR_UID; -                if (buf) -                        buf->ia_uid = sattr->uid.set_uid3_u.uid; -        } +    if (!sattr) +        return 0; -        if (sattr->gid.set_it) { -                valid |= GF_SET_ATTR_GID; -                if (buf) -                        buf->ia_gid = sattr->gid.set_gid3_u.gid; -        } +    if (sattr->mode.set_it) { +        valid |= GF_SET_ATTR_MODE; -        if (sattr->size.set_it) { -                valid |= GF_SET_ATTR_SIZE; -                if (buf) -                        buf->ia_size = sattr->size.set_size3_u.size; +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_ROWNER) { +            mode |= S_IRUSR; +            prot.owner.read = 1;          } - -        if (sattr->atime.set_it == SET_TO_CLIENT_TIME) { -                valid |= GF_SET_ATTR_ATIME; -                if (buf) -                        buf->ia_atime = sattr->atime.set_atime_u.atime.seconds; +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_WOWNER) { +            mode |= S_IWUSR; +            prot.owner.write = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_XOWNER) { +            mode |= S_IXUSR; +            prot.owner.exec = 1;          } -        if (sattr->atime.set_it == SET_TO_SERVER_TIME) { -                valid |= GF_SET_ATTR_ATIME; -                if (buf) -                        buf->ia_atime = time (NULL); +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_RGROUP) { +            mode |= S_IRGRP; +            prot.group.read = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_WGROUP) { +            mode |= S_IWGRP; +            prot.group.write = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_XGROUP) { +            mode |= S_IXGRP; +            prot.group.exec = 1;          } -        if (sattr->mtime.set_it == SET_TO_CLIENT_TIME) { -                valid |= GF_SET_ATTR_MTIME; -                if (buf) -                        buf->ia_mtime = sattr->mtime.set_mtime_u.mtime.seconds; +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_ROTHER) { +            mode |= S_IROTH; +            prot.other.read = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_WOTHER) { +            mode |= S_IWOTH; +            prot.other.write = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_XOTHER) { +            mode |= S_IXOTH; +            prot.other.exec = 1;          } -        if (sattr->mtime.set_it == SET_TO_SERVER_TIME) { -                valid |= GF_SET_ATTR_MTIME; -                if (buf) -                        buf->ia_mtime = time (NULL); +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_SETXUID) { +            mode |= S_ISUID; +            prot.suid = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_SETXGID) { +            mode |= S_ISGID; +            prot.sgid = 1; +        } +        if (sattr->mode.set_mode3_u.mode & NFS3MODE_SAVESWAPTXT) { +            mode |= S_ISVTX; +            prot.sticky = 1;          } -        return valid; +        if (buf) +            buf->ia_prot = prot; +        /* Create fop still requires the old mode_t style argument. */ +        if (omode) +            *omode = mode; +    } + +    if (sattr->uid.set_it) { +        valid |= GF_SET_ATTR_UID; +        if (buf) +            buf->ia_uid = sattr->uid.set_uid3_u.uid; +    } + +    if (sattr->gid.set_it) { +        valid |= GF_SET_ATTR_GID; +        if (buf) +            buf->ia_gid = sattr->gid.set_gid3_u.gid; +    } + +    if (sattr->size.set_it) { +        valid |= GF_SET_ATTR_SIZE; +        if (buf) +            buf->ia_size = sattr->size.set_size3_u.size; +    } + +    if (sattr->atime.set_it == SET_TO_CLIENT_TIME) { +        valid |= GF_SET_ATTR_ATIME; +        if (buf) +            buf->ia_atime = sattr->atime.set_atime_u.atime.seconds; +    } + +    if (sattr->atime.set_it == SET_TO_SERVER_TIME) { +        valid |= GF_SET_ATTR_ATIME; +        if (buf) +            buf->ia_atime = time(NULL); +    } + +    if (sattr->mtime.set_it == SET_TO_CLIENT_TIME) { +        valid |= GF_SET_ATTR_MTIME; +        if (buf) +            buf->ia_mtime = sattr->mtime.set_mtime_u.mtime.seconds; +    } + +    if (sattr->mtime.set_it == SET_TO_SERVER_TIME) { +        valid |= GF_SET_ATTR_MTIME; +        if (buf) +            buf->ia_mtime = time(NULL); +    } + +    return valid;  } -  wcc_data -nfs3_stat_to_wcc_data (struct iatt *pre, struct iatt *post) +nfs3_stat_to_wcc_data(struct iatt *pre, struct iatt *post)  { -        wcc_data        wd = {{0}, }; +    wcc_data wd = { +        {0}, +    }; -        if (post) -                wd.after = nfs3_stat_to_post_op_attr (post); -        if (pre) -                wd.before = nfs3_stat_to_pre_op_attr (pre); +    if (post) +        wd.after = nfs3_stat_to_post_op_attr(post); +    if (pre) +        wd.before = nfs3_stat_to_pre_op_attr(pre); -        return wd; +    return wd;  }  void -nfs3_fill_create3res (create3res *res, nfsstat3 stat, struct nfs3_fh *newfh, -                      struct iatt *newbuf, struct iatt *preparent, -                      struct iatt *postparent, uint64_t deviceid) +nfs3_fill_create3res(create3res *res, nfsstat3 stat, struct nfs3_fh *newfh, +                     struct iatt *newbuf, struct iatt *preparent, +                     struct iatt *postparent, uint64_t deviceid)  { -        post_op_attr    poa = {0, }; -        wcc_data        dirwcc = {{0}, }; +    post_op_attr poa = { +        0, +    }; +    wcc_data dirwcc = { +        {0}, +    }; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_fill_post_op_fh3 (newfh, &res->create3res_u.resok.obj); -        nfs3_map_deviceid_to_statdev (newbuf, deviceid); -        poa = nfs3_stat_to_post_op_attr (newbuf); -        res->create3res_u.resok.obj_attributes = poa; -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        dirwcc = nfs3_stat_to_wcc_data (preparent, postparent); +    nfs3_fill_post_op_fh3(newfh, &res->create3res_u.resok.obj); +    nfs3_map_deviceid_to_statdev(newbuf, deviceid); +    poa = nfs3_stat_to_post_op_attr(newbuf); +    res->create3res_u.resok.obj_attributes = poa; +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    dirwcc = nfs3_stat_to_wcc_data(preparent, postparent); -        res->create3res_u.resok.dir_wcc = dirwcc; +    res->create3res_u.resok.dir_wcc = dirwcc;  }  void -nfs3_prep_create3args (create3args *args, struct nfs3_fh *fh, char *name) +nfs3_prep_create3args(create3args *args, struct nfs3_fh *fh, char *name)  { - -        memset (args, 0, sizeof (*args)); -        args->where.dir.data.data_val = (void *)fh; -        args->where.name = name; +    memset(args, 0, sizeof(*args)); +    args->where.dir.data.data_val = (void *)fh; +    args->where.name = name;  }  void -nfs3_prep_setattr3args (setattr3args *args, struct nfs3_fh *fh) +nfs3_prep_setattr3args(setattr3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->object.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->object.data.data_val = (void *)fh;  } -  void -nfs3_fill_setattr3res (setattr3res *res, nfsstat3 stat, struct iatt *preop, -                       struct iatt *postop, uint64_t deviceid) +nfs3_fill_setattr3res(setattr3res *res, nfsstat3 stat, struct iatt *preop, +                      struct iatt *postop, uint64_t deviceid)  { -        wcc_data        wcc; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    wcc_data wcc; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (preop, deviceid); -        nfs3_map_deviceid_to_statdev (postop, deviceid); -        wcc = nfs3_stat_to_wcc_data (preop, postop); -        res->setattr3res_u.resok.obj_wcc = wcc; +    nfs3_map_deviceid_to_statdev(preop, deviceid); +    nfs3_map_deviceid_to_statdev(postop, deviceid); +    wcc = nfs3_stat_to_wcc_data(preop, postop); +    res->setattr3res_u.resok.obj_wcc = wcc;  } -  void -nfs3_prep_mkdir3args (mkdir3args *args, struct nfs3_fh *dirfh, char *name) +nfs3_prep_mkdir3args(mkdir3args *args, struct nfs3_fh *dirfh, char *name)  { - -        memset (args, 0, sizeof (*args)); -        args->where.dir.data.data_val = (void *)dirfh; -        args->where.name = name; +    memset(args, 0, sizeof(*args)); +    args->where.dir.data.data_val = (void *)dirfh; +    args->where.name = name;  } -  void -nfs3_fill_mkdir3res (mkdir3res *res, nfsstat3 stat, struct nfs3_fh *fh, -                     struct iatt *buf, struct iatt *preparent, -                     struct iatt *postparent, uint64_t deviceid) +nfs3_fill_mkdir3res(mkdir3res *res, nfsstat3 stat, struct nfs3_fh *fh, +                    struct iatt *buf, struct iatt *preparent, +                    struct iatt *postparent, uint64_t deviceid)  { -        wcc_data        dirwcc; -        post_op_attr    poa; - -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    wcc_data dirwcc; +    post_op_attr poa; -        nfs3_fill_post_op_fh3 (fh, &res->mkdir3res_u.resok.obj); -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        poa = nfs3_stat_to_post_op_attr (buf); -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        dirwcc = nfs3_stat_to_wcc_data (preparent, postparent); -        res->mkdir3res_u.resok.obj_attributes = poa; -        res->mkdir3res_u.resok.dir_wcc = dirwcc; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; +    nfs3_fill_post_op_fh3(fh, &res->mkdir3res_u.resok.obj); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    poa = nfs3_stat_to_post_op_attr(buf); +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    dirwcc = nfs3_stat_to_wcc_data(preparent, postparent); +    res->mkdir3res_u.resok.obj_attributes = poa; +    res->mkdir3res_u.resok.dir_wcc = dirwcc;  } -  void -nfs3_prep_symlink3args (symlink3args *args, struct nfs3_fh *dirfh, char *name, -                        char *target) +nfs3_prep_symlink3args(symlink3args *args, struct nfs3_fh *dirfh, char *name, +                       char *target)  { -        memset (args, 0, sizeof (*args)); -        args->where.dir.data.data_val = (void *)dirfh; -        args->where.name = name; -        args->symlink.symlink_data = target; +    memset(args, 0, sizeof(*args)); +    args->where.dir.data.data_val = (void *)dirfh; +    args->where.name = name; +    args->symlink.symlink_data = target;  } -  void -nfs3_fill_symlink3res (symlink3res *res, nfsstat3 stat, struct nfs3_fh *fh, -                       struct iatt *buf, struct iatt *preparent, -                       struct iatt *postparent, uint64_t deviceid) +nfs3_fill_symlink3res(symlink3res *res, nfsstat3 stat, struct nfs3_fh *fh, +                      struct iatt *buf, struct iatt *preparent, +                      struct iatt *postparent, uint64_t deviceid)  { -        wcc_data        dirwcc; -        post_op_attr    poa; +    wcc_data dirwcc; +    post_op_attr poa; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; - -        nfs3_fill_post_op_fh3 (fh, &res->symlink3res_u.resok.obj); -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        poa = nfs3_stat_to_post_op_attr (buf); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        dirwcc = nfs3_stat_to_wcc_data (preparent, postparent); -        res->symlink3res_u.resok.obj_attributes = poa; -        res->symlink3res_u.resok.dir_wcc = dirwcc; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; +    nfs3_fill_post_op_fh3(fh, &res->symlink3res_u.resok.obj); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    poa = nfs3_stat_to_post_op_attr(buf); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    dirwcc = nfs3_stat_to_wcc_data(preparent, postparent); +    res->symlink3res_u.resok.obj_attributes = poa; +    res->symlink3res_u.resok.dir_wcc = dirwcc;  } -  void -nfs3_prep_readlink3args (readlink3args *args, struct nfs3_fh *fh) +nfs3_prep_readlink3args(readlink3args *args, struct nfs3_fh *fh)  { - -        memset (args, 0, sizeof (*args)); -        args->symlink.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->symlink.data.data_val = (void *)fh;  } -  void -nfs3_fill_readlink3res (readlink3res *res, nfsstat3 stat, char *path, -                        struct iatt *buf, uint64_t deviceid) +nfs3_fill_readlink3res(readlink3res *res, nfsstat3 stat, char *path, +                       struct iatt *buf, uint64_t deviceid)  { -        post_op_attr    poa; +    post_op_attr poa; -        memset (res, 0, sizeof (*res)); -        res->status = stat; +    memset(res, 0, sizeof(*res)); +    res->status = stat; -        if (stat != NFS3_OK) -                return; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        poa = nfs3_stat_to_post_op_attr (buf); -        res->readlink3res_u.resok.data = (void *)path; -        res->readlink3res_u.resok.symlink_attributes = poa; +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    poa = nfs3_stat_to_post_op_attr(buf); +    res->readlink3res_u.resok.data = (void *)path; +    res->readlink3res_u.resok.symlink_attributes = poa;  } -  void -nfs3_prep_mknod3args (mknod3args *args, struct nfs3_fh *fh, char *name) +nfs3_prep_mknod3args(mknod3args *args, struct nfs3_fh *fh, char *name)  { -        memset (args, 0, sizeof (*args)); -        args->where.dir.data.data_val = (void *)fh; -        args->where.name = name; - +    memset(args, 0, sizeof(*args)); +    args->where.dir.data.data_val = (void *)fh; +    args->where.name = name;  }  void -nfs3_fill_mknod3res (mknod3res *res, nfsstat3 stat, struct nfs3_fh *fh, -                     struct iatt *buf, struct iatt *preparent, -                     struct iatt *postparent, uint64_t deviceid) +nfs3_fill_mknod3res(mknod3res *res, nfsstat3 stat, struct nfs3_fh *fh, +                    struct iatt *buf, struct iatt *preparent, +                    struct iatt *postparent, uint64_t deviceid)  { -        post_op_attr    poa; -        wcc_data        wccdir; - -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    post_op_attr poa; +    wcc_data wccdir; -        nfs3_fill_post_op_fh3 (fh, &res->mknod3res_u.resok.obj); -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        poa = nfs3_stat_to_post_op_attr (buf); -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        wccdir = nfs3_stat_to_wcc_data (preparent, postparent); -        res->mknod3res_u.resok.obj_attributes = poa; -        res->mknod3res_u.resok.dir_wcc = wccdir; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; +    nfs3_fill_post_op_fh3(fh, &res->mknod3res_u.resok.obj); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    poa = nfs3_stat_to_post_op_attr(buf); +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    wccdir = nfs3_stat_to_wcc_data(preparent, postparent); +    res->mknod3res_u.resok.obj_attributes = poa; +    res->mknod3res_u.resok.dir_wcc = wccdir;  } -  void -nfs3_fill_remove3res (remove3res *res, nfsstat3 stat, struct iatt *preparent, -                      struct iatt *postparent, uint64_t deviceid) +nfs3_fill_remove3res(remove3res *res, nfsstat3 stat, struct iatt *preparent, +                     struct iatt *postparent, uint64_t deviceid)  { -        wcc_data        dirwcc; +    wcc_data dirwcc; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        dirwcc = nfs3_stat_to_wcc_data (preparent, postparent); -        res->remove3res_u.resok.dir_wcc = dirwcc; +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    dirwcc = nfs3_stat_to_wcc_data(preparent, postparent); +    res->remove3res_u.resok.dir_wcc = dirwcc;  } -  void -nfs3_prep_remove3args (remove3args *args, struct nfs3_fh *fh, char *name) +nfs3_prep_remove3args(remove3args *args, struct nfs3_fh *fh, char *name)  { -        memset (args, 0, sizeof (*args)); -        args->object.dir.data.data_val = (void *)fh; -        args->object.name = name; +    memset(args, 0, sizeof(*args)); +    args->object.dir.data.data_val = (void *)fh; +    args->object.name = name;  } -  void -nfs3_prep_rmdir3args (rmdir3args *args, struct nfs3_fh *fh, char *name) +nfs3_prep_rmdir3args(rmdir3args *args, struct nfs3_fh *fh, char *name)  { -        memset (args, 0, sizeof (*args)); -        args->object.dir.data.data_val = (void *)fh; -        args->object.name = name; +    memset(args, 0, sizeof(*args)); +    args->object.dir.data.data_val = (void *)fh; +    args->object.name = name;  } -  void -nfs3_fill_rmdir3res (rmdir3res *res, nfsstat3 stat, struct iatt *preparent, -                     struct iatt *postparent, uint64_t deviceid) +nfs3_fill_rmdir3res(rmdir3res *res, nfsstat3 stat, struct iatt *preparent, +                    struct iatt *postparent, uint64_t deviceid)  { -        wcc_data        dirwcc; -        memset (res, 0, sizeof (*res)); -        res->status = stat; +    wcc_data dirwcc; +    memset(res, 0, sizeof(*res)); +    res->status = stat; -        if (stat != NFS3_OK) -                return; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        dirwcc = nfs3_stat_to_wcc_data (preparent, postparent); -        res->rmdir3res_u.resok.dir_wcc = dirwcc; +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    dirwcc = nfs3_stat_to_wcc_data(preparent, postparent); +    res->rmdir3res_u.resok.dir_wcc = dirwcc;  } -  void -nfs3_prep_link3args (link3args *args, struct nfs3_fh *target, -                     struct nfs3_fh * dirfh, char *name) +nfs3_prep_link3args(link3args *args, struct nfs3_fh *target, +                    struct nfs3_fh *dirfh, char *name)  { -        memset (args, 0, sizeof (*args)); -        args->file.data.data_val = (void *)target; -        args->link.dir.data.data_val = (void *)dirfh; -        args->link.name = name; +    memset(args, 0, sizeof(*args)); +    args->file.data.data_val = (void *)target; +    args->link.dir.data.data_val = (void *)dirfh; +    args->link.name = name;  } -  void -nfs3_fill_link3res (link3res *res, nfsstat3 stat, struct iatt *buf, -                    struct iatt *preparent, struct iatt *postparent, -                    uint64_t deviceid) +nfs3_fill_link3res(link3res *res, nfsstat3 stat, struct iatt *buf, +                   struct iatt *preparent, struct iatt *postparent, +                   uint64_t deviceid)  { -        post_op_attr    poa; -        wcc_data        dirwcc; +    post_op_attr poa; +    wcc_data dirwcc; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (preparent, deviceid); -        nfs3_map_deviceid_to_statdev (postparent, deviceid); -        nfs3_map_deviceid_to_statdev (buf,deviceid); -        poa = nfs3_stat_to_post_op_attr (buf); -        dirwcc = nfs3_stat_to_wcc_data (preparent, postparent); -        res->link3res_u.resok.file_attributes = poa; -        res->link3res_u.resok.linkdir_wcc = dirwcc; +    nfs3_map_deviceid_to_statdev(preparent, deviceid); +    nfs3_map_deviceid_to_statdev(postparent, deviceid); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    poa = nfs3_stat_to_post_op_attr(buf); +    dirwcc = nfs3_stat_to_wcc_data(preparent, postparent); +    res->link3res_u.resok.file_attributes = poa; +    res->link3res_u.resok.linkdir_wcc = dirwcc;  } - -  void -nfs3_prep_rename3args (rename3args *args, struct nfs3_fh *olddirfh, -                       char *oldname, struct nfs3_fh *newdirfh, char *newname) +nfs3_prep_rename3args(rename3args *args, struct nfs3_fh *olddirfh, +                      char *oldname, struct nfs3_fh *newdirfh, char *newname)  { -        memset (args, 0, sizeof (*args)); - -        args->from.name = oldname; -        args->from.dir.data.data_val = (void *)olddirfh; -        args->to.name = newname; -        args->to.dir.data.data_val = (void *)newdirfh; +    memset(args, 0, sizeof(*args)); +    args->from.name = oldname; +    args->from.dir.data.data_val = (void *)olddirfh; +    args->to.name = newname; +    args->to.dir.data.data_val = (void *)newdirfh;  } -  void -nfs3_fill_rename3res (rename3res *res, nfsstat3 stat, struct iatt *buf, -                      struct iatt *preoldparent, struct iatt *postoldparent, -                      struct iatt *prenewparent, struct iatt *postnewparent, -                      uint64_t deviceid) +nfs3_fill_rename3res(rename3res *res, nfsstat3 stat, struct iatt *buf, +                     struct iatt *preoldparent, struct iatt *postoldparent, +                     struct iatt *prenewparent, struct iatt *postnewparent, +                     uint64_t deviceid)  { -        wcc_data        dirwcc; +    wcc_data dirwcc; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (preoldparent, deviceid); -        nfs3_map_deviceid_to_statdev (postoldparent, deviceid); -        nfs3_map_deviceid_to_statdev (prenewparent, deviceid); -        nfs3_map_deviceid_to_statdev (postnewparent, deviceid); -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        dirwcc = nfs3_stat_to_wcc_data (preoldparent, postoldparent); -        res->rename3res_u.resok.fromdir_wcc = dirwcc; -        dirwcc = nfs3_stat_to_wcc_data (prenewparent, postnewparent); -        res->rename3res_u.resok.todir_wcc = dirwcc; +    nfs3_map_deviceid_to_statdev(preoldparent, deviceid); +    nfs3_map_deviceid_to_statdev(postoldparent, deviceid); +    nfs3_map_deviceid_to_statdev(prenewparent, deviceid); +    nfs3_map_deviceid_to_statdev(postnewparent, deviceid); +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    dirwcc = nfs3_stat_to_wcc_data(preoldparent, postoldparent); +    res->rename3res_u.resok.fromdir_wcc = dirwcc; +    dirwcc = nfs3_stat_to_wcc_data(prenewparent, postnewparent); +    res->rename3res_u.resok.todir_wcc = dirwcc;  } -  void -nfs3_prep_write3args (write3args *args, struct nfs3_fh *fh) +nfs3_prep_write3args(write3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->file.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->file.data.data_val = (void *)fh;  } -  void -nfs3_fill_write3res (write3res *res, nfsstat3 stat, count3 count, -                     stable_how stable, uint64_t wverf, struct iatt *prestat, -                     struct iatt *poststat, uint64_t deviceid) +nfs3_fill_write3res(write3res *res, nfsstat3 stat, count3 count, +                    stable_how stable, uint64_t wverf, struct iatt *prestat, +                    struct iatt *poststat, uint64_t deviceid)  { -        write3resok     resok; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    write3resok resok; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (prestat, deviceid); -        nfs3_map_deviceid_to_statdev (poststat, deviceid); -        resok.file_wcc = nfs3_stat_to_wcc_data (prestat, poststat); -        resok.count = count; -        resok.committed = stable; -        memcpy (resok.verf, &wverf, sizeof (wverf)); +    nfs3_map_deviceid_to_statdev(prestat, deviceid); +    nfs3_map_deviceid_to_statdev(poststat, deviceid); +    resok.file_wcc = nfs3_stat_to_wcc_data(prestat, poststat); +    resok.count = count; +    resok.committed = stable; +    memcpy(resok.verf, &wverf, sizeof(wverf)); -        res->write3res_u.resok = resok; +    res->write3res_u.resok = resok;  } -  void -nfs3_prep_commit3args (commit3args *args, struct nfs3_fh *fh) +nfs3_prep_commit3args(commit3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->file.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->file.data.data_val = (void *)fh;  } -  void -nfs3_fill_commit3res (commit3res *res, nfsstat3 stat, uint64_t wverf, -                      struct iatt *prestat, struct iatt *poststat, -                      uint64_t deviceid) +nfs3_fill_commit3res(commit3res *res, nfsstat3 stat, uint64_t wverf, +                     struct iatt *prestat, struct iatt *poststat, +                     uint64_t deviceid)  { -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (poststat, deviceid); -        nfs3_map_deviceid_to_statdev (prestat, deviceid); -        res->commit3res_u.resok.file_wcc = nfs3_stat_to_wcc_data (prestat, -                                                                  poststat); -        memcpy (res->commit3res_u.resok.verf, &wverf, sizeof (wverf)); +    nfs3_map_deviceid_to_statdev(poststat, deviceid); +    nfs3_map_deviceid_to_statdev(prestat, deviceid); +    res->commit3res_u.resok.file_wcc = nfs3_stat_to_wcc_data(prestat, poststat); +    memcpy(res->commit3res_u.resok.verf, &wverf, sizeof(wverf));  }  void -nfs3_fill_read3res (read3res *res, nfsstat3 stat, count3 count, -                    struct iatt *poststat, int is_eof, uint64_t deviceid) +nfs3_fill_read3res(read3res *res, nfsstat3 stat, count3 count, +                   struct iatt *poststat, int is_eof, uint64_t deviceid)  { -        post_op_attr    poa; +    post_op_attr poa; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (poststat, deviceid); -        poa = nfs3_stat_to_post_op_attr (poststat); -        res->read3res_u.resok.file_attributes = poa; -        res->read3res_u.resok.count = count; -        res->read3res_u.resok.eof = is_eof; -        res->read3res_u.resok.data.data_len = count; +    nfs3_map_deviceid_to_statdev(poststat, deviceid); +    poa = nfs3_stat_to_post_op_attr(poststat); +    res->read3res_u.resok.file_attributes = poa; +    res->read3res_u.resok.count = count; +    res->read3res_u.resok.eof = is_eof; +    res->read3res_u.resok.data.data_len = count;  } -  void -nfs3_prep_read3args (read3args *args, struct nfs3_fh *fh) +nfs3_prep_read3args(read3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->file.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->file.data.data_val = (void *)fh;  } -  void -nfs3_fill_pathconf3res (pathconf3res *res, nfsstat3 stat, struct iatt *buf, -                        uint64_t deviceid) +nfs3_fill_pathconf3res(pathconf3res *res, nfsstat3 stat, struct iatt *buf, +                       uint64_t deviceid)  { -        pathconf3resok  resok; +    pathconf3resok resok; -        memset (res, 0, sizeof (*res)); -        res->status = stat; -        if (stat != NFS3_OK) -                return; +    memset(res, 0, sizeof(*res)); +    res->status = stat; +    if (stat != NFS3_OK) +        return; -        nfs3_map_deviceid_to_statdev (buf, deviceid); -        resok.obj_attributes = nfs3_stat_to_post_op_attr (buf); -        resok.linkmax = 256; -        resok.name_max = NFS_NAME_MAX; -        resok.no_trunc = TRUE; -        resok.chown_restricted = FALSE; -        resok.case_insensitive = FALSE; -        resok.case_preserving = TRUE; +    nfs3_map_deviceid_to_statdev(buf, deviceid); +    resok.obj_attributes = nfs3_stat_to_post_op_attr(buf); +    resok.linkmax = 256; +    resok.name_max = NFS_NAME_MAX; +    resok.no_trunc = TRUE; +    resok.chown_restricted = FALSE; +    resok.case_insensitive = FALSE; +    resok.case_preserving = TRUE; -        res->pathconf3res_u.resok = resok; +    res->pathconf3res_u.resok = resok;  } -  void -nfs3_prep_pathconf3args (pathconf3args *args, struct nfs3_fh *fh) +nfs3_prep_pathconf3args(pathconf3args *args, struct nfs3_fh *fh)  { -        memset (args, 0, sizeof (*args)); -        args->object.data.data_val = (void *)fh; +    memset(args, 0, sizeof(*args)); +    args->object.data.data_val = (void *)fh;  } -  int -nfs3_verify_dircookie (struct nfs3_state *nfs3, fd_t *dirfd, cookie3 cookie, -                       uint64_t cverf, nfsstat3 *stat) +nfs3_verify_dircookie(struct nfs3_state *nfs3, fd_t *dirfd, cookie3 cookie, +                      uint64_t cverf, nfsstat3 *stat)  { -        int             ret = -1; +    int ret = -1; -        if ((!nfs3) || (!dirfd)) -                return -1; +    if ((!nfs3) || (!dirfd)) +        return -1; -        /* Can assume that this is first read on the dir, so cookie check -         * is successful by default. -         */ -        if (cookie == 0) -                return 0; - -        gf_msg_trace (GF_NFS3, 0, "Verifying cookie: cverf: %"PRIu64 -                      ", cookie: %"PRIu64, cverf, cookie); -        /* The cookie bad, no way cverf will be zero with a non-zero cookie. */ -        if ((cverf == 0) && (cookie != 0)) { -                gf_msg_trace (GF_NFS3, 0, "Bad cookie requested"); -                if (stat) -                        *stat = NFS3ERR_BAD_COOKIE; -                goto err; -        } +    /* Can assume that this is first read on the dir, so cookie check +     * is successful by default. +     */ +    if (cookie == 0) +        return 0; -        /* Yes, its true, our cookie is simply the fd_t address. -         * NOTE: We used have the check for cookieverf but VMWare client sends -         * a readdirp requests even after we've told it that EOF has been -         * reached on the directory. This causes a problem because we close a -         * dir fd_t after reaching EOF. The next readdirp sent by VMWare -         * contains the address of the closed fd_t as cookieverf. Since we -         * closed that fd_t, this readdirp results in a new opendir which will -         * give an fd_t that will fail this check below. -         */ -/*        if ((cverf != (uint64_t)dirfd)) { -                gf_log (GF_NFS3, GF_LOG_TRACE, "Cookieverf does not match"); -                if (stat) -                        *stat = NFS3ERR_BAD_COOKIE; -                goto err; -        } -*/ -        gf_msg_trace (GF_NFS3, 0, "Cookie verified"); +    gf_msg_trace(GF_NFS3, 0, +                 "Verifying cookie: cverf: %" PRIu64 ", cookie: %" PRIu64, +                 cverf, cookie); +    /* The cookie bad, no way cverf will be zero with a non-zero cookie. */ +    if ((cverf == 0) && (cookie != 0)) { +        gf_msg_trace(GF_NFS3, 0, "Bad cookie requested");          if (stat) -                *stat = NFS3_OK; -        ret = 0; +            *stat = NFS3ERR_BAD_COOKIE; +        goto err; +    } + +    /* Yes, its true, our cookie is simply the fd_t address. +     * NOTE: We used have the check for cookieverf but VMWare client sends +     * a readdirp requests even after we've told it that EOF has been +     * reached on the directory. This causes a problem because we close a +     * dir fd_t after reaching EOF. The next readdirp sent by VMWare +     * contains the address of the closed fd_t as cookieverf. Since we +     * closed that fd_t, this readdirp results in a new opendir which will +     * give an fd_t that will fail this check below. +     */ +    /*        if ((cverf != (uint64_t)dirfd)) { +                    gf_log (GF_NFS3, GF_LOG_TRACE, "Cookieverf does not match"); +                    if (stat) +                            *stat = NFS3ERR_BAD_COOKIE; +                    goto err; +            } +    */ +    gf_msg_trace(GF_NFS3, 0, "Cookie verified"); +    if (stat) +        *stat = NFS3_OK; +    ret = 0;  err: -        return ret; +    return ret;  } -  void -nfs3_stat_to_errstr (uint32_t xid, char *op, nfsstat3 stat, int pstat, -                     char *errstr, size_t len) +nfs3_stat_to_errstr(uint32_t xid, char *op, nfsstat3 stat, int pstat, +                    char *errstr, size_t len)  { -        if ((!op) || (!errstr)) -                return; +    if ((!op) || (!errstr)) +        return; -        snprintf (errstr, len, "XID: %x, %s: NFS: %d(%s), POSIX: %d(%s)", -                  xid, op,stat, nfsstat3_strerror (stat), pstat, -                  strerror (pstat)); +    snprintf(errstr, len, "XID: %x, %s: NFS: %d(%s), POSIX: %d(%s)", xid, op, +             stat, nfsstat3_strerror(stat), pstat, strerror(pstat));  }  void -nfs3_log_common_call (uint32_t xid, char *op, struct nfs3_fh *fh) +nfs3_log_common_call(uint32_t xid, char *op, struct nfs3_fh *fh)  { -        char    fhstr[1024]; +    char fhstr[1024]; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); -        gf_msg_debug (GF_NFS3, 0, "XID: %x, %s: args: %s", xid, op, fhstr); +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); +    gf_msg_debug(GF_NFS3, 0, "XID: %x, %s: args: %s", xid, op, fhstr);  } -  void -nfs3_log_fh_entry_call (uint32_t xid, char *op, struct nfs3_fh *fh, -                        char *name) +nfs3_log_fh_entry_call(uint32_t xid, char *op, struct nfs3_fh *fh, char *name)  { -        char    fhstr[1024]; +    char fhstr[1024]; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); -        gf_msg_debug (GF_NFS3, 0, "XID: %x, %s: args: %s, name: %s", xid, -                      op, fhstr, name); +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); +    gf_msg_debug(GF_NFS3, 0, "XID: %x, %s: args: %s, name: %s", xid, op, fhstr, +                 name);  } -  void -nfs3_log_rename_call (uint32_t xid, struct nfs3_fh *src, char *sname, -                      struct nfs3_fh *dst, char *dname) +nfs3_log_rename_call(uint32_t xid, struct nfs3_fh *src, char *sname, +                     struct nfs3_fh *dst, char *dname)  { -        char    sfhstr[1024]; -        char    dfhstr[1024]; +    char sfhstr[1024]; +    char dfhstr[1024]; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (src, sfhstr, sizeof (sfhstr)); -        nfs3_fh_to_str (dst, dfhstr, sizeof (dfhstr)); -        gf_msg_debug (GF_NFS3, 0, "XID: %x, RENAME: args: Src: %s, " -                      "name: %s, Dst: %s, name: %s", xid, sfhstr, sname, -                      dfhstr, dname); +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(src, sfhstr, sizeof(sfhstr)); +    nfs3_fh_to_str(dst, dfhstr, sizeof(dfhstr)); +    gf_msg_debug(GF_NFS3, 0, +                 "XID: %x, RENAME: args: Src: %s, " +                 "name: %s, Dst: %s, name: %s", +                 xid, sfhstr, sname, dfhstr, dname);  } - -  void -nfs3_log_create_call (uint32_t xid, struct nfs3_fh *fh, char *name, -                      createmode3 mode) +nfs3_log_create_call(uint32_t xid, struct nfs3_fh *fh, char *name, +                     createmode3 mode)  { -        char    fhstr[1024]; -        char    *modestr = NULL; -        char    exclmode[] = "EXCLUSIVE"; -        char    unchkd[] = "UNCHECKED"; -        char    guarded[] = "GUARDED"; +    char fhstr[1024]; +    char *modestr = NULL; +    char exclmode[] = "EXCLUSIVE"; +    char unchkd[] = "UNCHECKED"; +    char guarded[] = "GUARDED"; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); -        if (mode == EXCLUSIVE) -                modestr = exclmode; -        else if (mode == GUARDED) -                modestr = guarded; -        else -                modestr = unchkd; +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); +    if (mode == EXCLUSIVE) +        modestr = exclmode; +    else if (mode == GUARDED) +        modestr = guarded; +    else +        modestr = unchkd; -        gf_msg_debug (GF_NFS3, 0, "XID: %x, CREATE: args: %s, name: %s," -                      " mode: %s", xid, fhstr, name, modestr); +    gf_msg_debug(GF_NFS3, 0, +                 "XID: %x, CREATE: args: %s, name: %s," +                 " mode: %s", +                 xid, fhstr, name, modestr);  } -  void -nfs3_log_mknod_call (uint32_t xid, struct nfs3_fh *fh, char *name, int type) +nfs3_log_mknod_call(uint32_t xid, struct nfs3_fh *fh, char *name, int type)  { -        char    fhstr[1024]; -        char    *modestr = NULL; -        char    chr[] = "CHAR"; -        char    blk[] = "BLK"; -        char    sock[] = "SOCK"; -        char    fifo[] = "FIFO"; +    char fhstr[1024]; +    char *modestr = NULL; +    char chr[] = "CHAR"; +    char blk[] = "BLK"; +    char sock[] = "SOCK"; +    char fifo[] = "FIFO"; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); -        if (type == NF3CHR) -                modestr = chr; -        else if (type == NF3BLK) -                modestr = blk; -        else if (type == NF3SOCK) -                modestr = sock; -        else -                modestr = fifo; +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); +    if (type == NF3CHR) +        modestr = chr; +    else if (type == NF3BLK) +        modestr = blk; +    else if (type == NF3SOCK) +        modestr = sock; +    else +        modestr = fifo; -        gf_msg_debug (GF_NFS3, 0, "XID: %x, MKNOD: args: %s, name: %s," -                      " type: %s", xid, fhstr, name, modestr); +    gf_msg_debug(GF_NFS3, 0, +                 "XID: %x, MKNOD: args: %s, name: %s," +                 " type: %s", +                 xid, fhstr, name, modestr);  } - -  void -nfs3_log_symlink_call (uint32_t xid, struct nfs3_fh *fh, char *name, char *tgt) +nfs3_log_symlink_call(uint32_t xid, struct nfs3_fh *fh, char *name, char *tgt)  { -        char    fhstr[1024]; +    char fhstr[1024]; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); -        gf_msg_debug (GF_NFS3, 0, "XID: %x, SYMLINK: args: %s, name: %s," -                      " target: %s", xid, fhstr, name, tgt); +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); +    gf_msg_debug(GF_NFS3, 0, +                 "XID: %x, SYMLINK: args: %s, name: %s," +                 " target: %s", +                 xid, fhstr, name, tgt);  } -  void -nfs3_log_link_call (uint32_t xid, struct nfs3_fh *fh, char *name, -                    struct nfs3_fh *tgt) +nfs3_log_link_call(uint32_t xid, struct nfs3_fh *fh, char *name, +                   struct nfs3_fh *tgt)  { -        char    dfhstr[1024]; -        char    tfhstr[1024]; +    char dfhstr[1024]; +    char tfhstr[1024]; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (fh, dfhstr, sizeof (dfhstr)); -        nfs3_fh_to_str (tgt, tfhstr, sizeof (tfhstr)); -        gf_msg_debug (GF_NFS3, 0, "XID: %x, LINK: args: %s, name: %s," -                      " target: %s", xid, dfhstr, name, tfhstr); +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(fh, dfhstr, sizeof(dfhstr)); +    nfs3_fh_to_str(tgt, tfhstr, sizeof(tfhstr)); +    gf_msg_debug(GF_NFS3, 0, +                 "XID: %x, LINK: args: %s, name: %s," +                 " target: %s", +                 xid, dfhstr, name, tfhstr);  } -  void -nfs3_log_rw_call (uint32_t xid, char *op, struct nfs3_fh *fh, offset3 offt, -                  count3 count, int stablewrite) +nfs3_log_rw_call(uint32_t xid, char *op, struct nfs3_fh *fh, offset3 offt, +                 count3 count, int stablewrite)  { -        char    fhstr[1024]; - -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); -        if (stablewrite == -1) -                gf_msg_debug (GF_NFS3, 0, "XID: %x, %s: args: %s, offset:" -                              " %"PRIu64",  count: %"PRIu32, xid, op, fhstr, -                              offt, count); -        else -                gf_msg_debug (GF_NFS3, 0, "XID: %x, %s: args: %s, offset:" -                              " %"PRIu64",  count: %"PRIu32", %s", xid, op, -                              fhstr, offt, count, -                              (stablewrite == UNSTABLE)?"UNSTABLE":"STABLE"); +    char fhstr[1024]; +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); +    if (stablewrite == -1) +        gf_msg_debug(GF_NFS3, 0, +                     "XID: %x, %s: args: %s, offset:" +                     " %" PRIu64 ",  count: %" PRIu32, +                     xid, op, fhstr, offt, count); +    else +        gf_msg_debug(GF_NFS3, 0, +                     "XID: %x, %s: args: %s, offset:" +                     " %" PRIu64 ",  count: %" PRIu32 ", %s", +                     xid, op, fhstr, offt, count, +                     (stablewrite == UNSTABLE) ? "UNSTABLE" : "STABLE");  } -  int -nfs3_getattr_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_getattr_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_PERM: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ACCES: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_setattr_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_setattr_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_lookup_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_lookup_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_PERM: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ACCES: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_access_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_access_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_readlink_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_readlink_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  }  int -nfs3_read_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_read_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_write_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_write_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_create_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_create_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_mkdir_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_mkdir_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_symlink_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_symlink_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_mknod_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_mknod_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  }  int -nfs3_remove_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_remove_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_rmdir_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_rmdir_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_rename_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_rename_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_link_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_link_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_readdir_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_readdir_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  } -  int -nfs3_fsstat_loglevel (nfsstat3 stat) { - -	int ll = GF_LOG_DEBUG; - -	switch (stat) { +nfs3_fsstat_loglevel(nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; +    switch (stat) {          case NFS3ERR_PERM: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOENT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ACCES: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_EXIST: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_XDEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NODEV: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_IO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NXIO: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ISDIR: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_INVAL: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOSPC: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_ROFS: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_FBIG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_MLINK: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NAMETOOLONG: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTEMPTY: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_SERVERFAULT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_NOTSUPP: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_BADHANDLE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_STALE: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          case NFS3ERR_DQUOT: -		ll = GF_LOG_WARNING; -                break; +            ll = GF_LOG_WARNING; +            break;          default: -		ll = GF_LOG_DEBUG; -                break; -        } +            ll = GF_LOG_DEBUG; +            break; +    } -        return ll; +    return ll;  }  struct nfs3op_str { -	int	op; -	char	str[100]; +    int op; +    char str[100];  };  struct nfs3op_str nfs3op_strings[] = { -	{ NFS3_NULL, "NULL"}, -	{ NFS3_GETATTR, "GETATTR"}, -	{ NFS3_SETATTR, "SETATTR"}, -	{ NFS3_LOOKUP, "LOOKUP"}, -	{ NFS3_ACCESS, "ACCESS"}, -	{ NFS3_READLINK, "READLINK"}, -	{ NFS3_READ, "READ"}, -	{ NFS3_WRITE, "WRITE"}, -	{ NFS3_CREATE, "CREATE"}, -	{ NFS3_MKDIR, "MKDIR"}, -	{ NFS3_SYMLINK, "SYMLINK"}, -	{ NFS3_MKNOD, "MKNOD"}, -	{ NFS3_REMOVE, "REMOVE"}, -	{ NFS3_RMDIR, "RMDIR"}, -	{ NFS3_RENAME, "RENAME"}, -	{ NFS3_LINK, "LINK"}, -	{ NFS3_READDIR, "READDIR"}, -	{ NFS3_READDIRP, "READDIRP"}, -	{ NFS3_FSSTAT, "FSSTAT"}, -	{ NFS3_FSINFO, "FSINFO"}, -	{ NFS3_PATHCONF, "PATHCONF"}, -	{ NFS3_COMMIT, "COMMIT"}, +    {NFS3_NULL, "NULL"},         {NFS3_GETATTR, "GETATTR"}, +    {NFS3_SETATTR, "SETATTR"},   {NFS3_LOOKUP, "LOOKUP"}, +    {NFS3_ACCESS, "ACCESS"},     {NFS3_READLINK, "READLINK"}, +    {NFS3_READ, "READ"},         {NFS3_WRITE, "WRITE"}, +    {NFS3_CREATE, "CREATE"},     {NFS3_MKDIR, "MKDIR"}, +    {NFS3_SYMLINK, "SYMLINK"},   {NFS3_MKNOD, "MKNOD"}, +    {NFS3_REMOVE, "REMOVE"},     {NFS3_RMDIR, "RMDIR"}, +    {NFS3_RENAME, "RENAME"},     {NFS3_LINK, "LINK"}, +    {NFS3_READDIR, "READDIR"},   {NFS3_READDIRP, "READDIRP"}, +    {NFS3_FSSTAT, "FSSTAT"},     {NFS3_FSINFO, "FSINFO"}, +    {NFS3_PATHCONF, "PATHCONF"}, {NFS3_COMMIT, "COMMIT"},  };  int -nfs3_loglevel (int nfs_op, nfsstat3 stat) { - -	int	ll = GF_LOG_DEBUG; +nfs3_loglevel(int nfs_op, nfsstat3 stat) +{ +    int ll = GF_LOG_DEBUG; -	switch (nfs_op) { -	case NFS3_GETATTR: -		ll = nfs3_getattr_loglevel (stat); -		break; +    switch (nfs_op) { +        case NFS3_GETATTR: +            ll = nfs3_getattr_loglevel(stat); +            break; -	case NFS3_SETATTR: -		ll = nfs3_setattr_loglevel (stat); -		break; +        case NFS3_SETATTR: +            ll = nfs3_setattr_loglevel(stat); +            break; -	case NFS3_LOOKUP: -		ll = nfs3_lookup_loglevel (stat); -		break; +        case NFS3_LOOKUP: +            ll = nfs3_lookup_loglevel(stat); +            break; -	case NFS3_ACCESS: -		ll = nfs3_access_loglevel (stat); -		break; +        case NFS3_ACCESS: +            ll = nfs3_access_loglevel(stat); +            break; -	case NFS3_READLINK: -		ll = nfs3_readlink_loglevel (stat); -		break; +        case NFS3_READLINK: +            ll = nfs3_readlink_loglevel(stat); +            break; -	case NFS3_READ: -		ll = nfs3_read_loglevel (stat); -		break; +        case NFS3_READ: +            ll = nfs3_read_loglevel(stat); +            break; -	case NFS3_WRITE: -		ll = nfs3_write_loglevel (stat); -		break; +        case NFS3_WRITE: +            ll = nfs3_write_loglevel(stat); +            break; -	case NFS3_CREATE: -		ll = nfs3_create_loglevel (stat); -		break; +        case NFS3_CREATE: +            ll = nfs3_create_loglevel(stat); +            break; -	case NFS3_MKDIR: -		ll = nfs3_mkdir_loglevel (stat); -		break; +        case NFS3_MKDIR: +            ll = nfs3_mkdir_loglevel(stat); +            break; -	case NFS3_SYMLINK: -		ll = nfs3_symlink_loglevel (stat); -		break; +        case NFS3_SYMLINK: +            ll = nfs3_symlink_loglevel(stat); +            break; -	case NFS3_MKNOD: -		ll = nfs3_mknod_loglevel (stat); -		break; +        case NFS3_MKNOD: +            ll = nfs3_mknod_loglevel(stat); +            break; -	case NFS3_REMOVE: -		ll = nfs3_remove_loglevel (stat); -		break; +        case NFS3_REMOVE: +            ll = nfs3_remove_loglevel(stat); +            break; -	case NFS3_RMDIR: -		ll = nfs3_rmdir_loglevel (stat); -		break; +        case NFS3_RMDIR: +            ll = nfs3_rmdir_loglevel(stat); +            break; -	case NFS3_RENAME: -		ll = nfs3_rename_loglevel (stat); -		break; +        case NFS3_RENAME: +            ll = nfs3_rename_loglevel(stat); +            break; -	case NFS3_LINK: -		ll = nfs3_link_loglevel (stat); -		break; +        case NFS3_LINK: +            ll = nfs3_link_loglevel(stat); +            break; -	case NFS3_READDIR: -		ll = nfs3_readdir_loglevel (stat); -		break; +        case NFS3_READDIR: +            ll = nfs3_readdir_loglevel(stat); +            break; -	case NFS3_READDIRP: -		ll = nfs3_readdir_loglevel (stat); -		break; +        case NFS3_READDIRP: +            ll = nfs3_readdir_loglevel(stat); +            break; -	case NFS3_FSSTAT: -		ll = nfs3_fsstat_loglevel (stat); -		break; +        case NFS3_FSSTAT: +            ll = nfs3_fsstat_loglevel(stat); +            break; -	case NFS3_FSINFO: -		ll = nfs3_fsstat_loglevel (stat); -		break; +        case NFS3_FSINFO: +            ll = nfs3_fsstat_loglevel(stat); +            break; -	case NFS3_PATHCONF: -		ll = nfs3_fsstat_loglevel (stat); -		break; +        case NFS3_PATHCONF: +            ll = nfs3_fsstat_loglevel(stat); +            break; -	case NFS3_COMMIT: -		ll = nfs3_write_loglevel (stat); -		break; +        case NFS3_COMMIT: +            ll = nfs3_write_loglevel(stat); +            break; -	default: -		ll = GF_LOG_DEBUG; -		break; -	} +        default: +            ll = GF_LOG_DEBUG; +            break; +    } -	return ll; +    return ll;  }  void -nfs3_log_common_res (uint32_t xid, int op, nfsstat3 stat, int pstat, -                     const char *path) +nfs3_log_common_res(uint32_t xid, int op, nfsstat3 stat, int pstat, +                    const char *path)  { -        char    errstr[1024]; -        int     ll = nfs3_loglevel (op, stat); - -        if (THIS->ctx->log.loglevel < ll) -                return; -        nfs3_stat_to_errstr (xid, nfs3op_strings[op].str, stat, pstat, errstr, sizeof (errstr)); -                if (ll == GF_LOG_DEBUG) -                        gf_msg_debug (GF_NFS3, 0, "%s => (%s)", path, -                                      errstr); -                else -                        gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                                "%s => (%s)", path, errstr); +    char errstr[1024]; +    int ll = nfs3_loglevel(op, stat); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, nfs3op_strings[op].str, stat, pstat, errstr, +                        sizeof(errstr)); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, "%s => (%s)", path, errstr); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, "%s => (%s)", path, +               errstr);  }  void -nfs3_log_readlink_res (uint32_t xid, nfsstat3 stat, int pstat, char *linkpath, -                       const char *path) +nfs3_log_readlink_res(uint32_t xid, nfsstat3 stat, int pstat, char *linkpath, +                      const char *path)  { -        char    errstr[1024]; -        int     ll = nfs3_loglevel (NFS3_READLINK, stat); - -        if (THIS->ctx->log.loglevel < ll) -                return; +    char errstr[1024]; +    int ll = nfs3_loglevel(NFS3_READLINK, stat); -        nfs3_stat_to_errstr (xid, "READLINK", stat, pstat, errstr, sizeof (errstr)); -        if (ll == GF_LOG_DEBUG) -                gf_msg_debug (GF_NFS3, 0, "%s => (%s), target: %s", path, -                              errstr, linkpath); -        else -                gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                        "%s => (%s) target: %s" , path, -                        errstr, linkpath); -} - -void -nfs3_log_read_res (uint32_t xid, nfsstat3 stat, int pstat, count3 count, -                   int is_eof, struct iovec *vec, -                   int32_t veccount, const char *path) -{ -        char    errstr[1024]; -        int     ll = GF_LOG_DEBUG; - -        ll = nfs3_loglevel (NFS3_READ, stat); -        if (THIS->ctx->log.loglevel < ll) -                return; -        nfs3_stat_to_errstr (xid, "READ", stat, pstat, errstr, sizeof (errstr)); -        if (vec) -                if (ll == GF_LOG_DEBUG) -                        gf_msg_debug (GF_NFS3, 0, -                                      "%s => (%s), count: %"PRIu32", is_eof:" -                                      " %d, vector: count: %d, len: %zd", path, -                                      errstr, count, is_eof, veccount, -                                      vec->iov_len); -                else -                        gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                                "%s => (%s), count: %"PRIu32", is_eof:" -                                " %d, vector: count: %d, len: %zd", path, -                                errstr, count, is_eof, veccount, vec->iov_len); -        else -                if (ll == GF_LOG_DEBUG) -                        gf_msg_debug (GF_NFS3, 0, -                                      "%s => (%s), count: %"PRIu32", is_eof:" -                                      " %d", path, errstr, count, is_eof); -                else -                        gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                                "%s => (%s), count: %"PRIu32", is_eof:" -                                " %d", path, errstr, count, is_eof); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, "READLINK", stat, pstat, errstr, sizeof(errstr)); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, "%s => (%s), target: %s", path, errstr, +                     linkpath); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, "%s => (%s) target: %s", +               path, errstr, linkpath);  }  void -nfs3_log_write_res (uint32_t xid, nfsstat3 stat, int pstat, count3 count, -                    int stable, uint64_t wverf, const char *path) +nfs3_log_read_res(uint32_t xid, nfsstat3 stat, int pstat, count3 count, +                  int is_eof, struct iovec *vec, int32_t veccount, +                  const char *path)  { -        char    errstr[1024]; -        int     ll = nfs3_loglevel (NFS3_WRITE, stat); - -        if (THIS->ctx->log.loglevel < ll) -                return; +    char errstr[1024]; +    int ll = GF_LOG_DEBUG; -        nfs3_stat_to_errstr (xid, "WRITE", stat, pstat, errstr, sizeof (errstr)); +    ll = nfs3_loglevel(NFS3_READ, stat); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, "READ", stat, pstat, errstr, sizeof(errstr)); +    if (vec)          if (ll == GF_LOG_DEBUG) -                gf_msg_debug (GF_NFS3, 0, -                              "%s => (%s), count: %"PRIu32", %s,wverf: " -                              "%"PRIu64, path, errstr, count, -                              (stable == UNSTABLE)?"UNSTABLE":"STABLE", wverf); +            gf_msg_debug(GF_NFS3, 0, +                         "%s => (%s), count: %" PRIu32 +                         ", is_eof:" +                         " %d, vector: count: %d, len: %zd", +                         path, errstr, count, is_eof, veccount, vec->iov_len);          else -                gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                        "%s => (%s), count: %"PRIu32", %s,wverf: %"PRIu64 -                        , path, errstr, count, -                        (stable == UNSTABLE)?"UNSTABLE":"STABLE", wverf); +            gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, +                   "%s => (%s), count: %" PRIu32 +                   ", is_eof:" +                   " %d, vector: count: %d, len: %zd", +                   path, errstr, count, is_eof, veccount, vec->iov_len); +    else if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, +                     "%s => (%s), count: %" PRIu32 +                     ", is_eof:" +                     " %d", +                     path, errstr, count, is_eof); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, +               "%s => (%s), count: %" PRIu32 +               ", is_eof:" +               " %d", +               path, errstr, count, is_eof); +} + +void +nfs3_log_write_res(uint32_t xid, nfsstat3 stat, int pstat, count3 count, +                   int stable, uint64_t wverf, const char *path) +{ +    char errstr[1024]; +    int ll = nfs3_loglevel(NFS3_WRITE, stat); + +    if (THIS->ctx->log.loglevel < ll) +        return; + +    nfs3_stat_to_errstr(xid, "WRITE", stat, pstat, errstr, sizeof(errstr)); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, +                     "%s => (%s), count: %" PRIu32 +                     ", %s,wverf: " +                     "%" PRIu64, +                     path, errstr, count, +                     (stable == UNSTABLE) ? "UNSTABLE" : "STABLE", wverf); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, +               "%s => (%s), count: %" PRIu32 ", %s,wverf: %" PRIu64, path, +               errstr, count, (stable == UNSTABLE) ? "UNSTABLE" : "STABLE", +               wverf);  }  void -nfs3_log_newfh_res (uint32_t xid, int op, nfsstat3 stat, int pstat, -                    struct nfs3_fh *newfh, const char *path) +nfs3_log_newfh_res(uint32_t xid, int op, nfsstat3 stat, int pstat, +                   struct nfs3_fh *newfh, const char *path)  { -        char    errstr[1024]; -        char    fhstr[1024]; -        int     ll = nfs3_loglevel (op, stat); +    char errstr[1024]; +    char fhstr[1024]; +    int ll = nfs3_loglevel(op, stat); -        if (THIS->ctx->log.loglevel < ll) -                return; -        nfs3_stat_to_errstr (xid, nfs3op_strings[op].str, stat, pstat, errstr, sizeof (errstr)); -        nfs3_fh_to_str (newfh, fhstr, sizeof (fhstr)); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, nfs3op_strings[op].str, stat, pstat, errstr, +                        sizeof(errstr)); +    nfs3_fh_to_str(newfh, fhstr, sizeof(fhstr)); -        if (ll == GF_LOG_DEBUG) -                gf_msg_debug (GF_NFS3, 0, "%s => (%s), %s", path, errstr, -                              fhstr); -        else -                gf_msg (GF_NFS3, nfs3_loglevel (op, stat), errno, NFS_MSG_STAT_ERROR, -                        "%s => (%s), %s", path, errstr, fhstr); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, "%s => (%s), %s", path, errstr, fhstr); +    else +        gf_msg(GF_NFS3, nfs3_loglevel(op, stat), errno, NFS_MSG_STAT_ERROR, +               "%s => (%s), %s", path, errstr, fhstr);  }  void -nfs3_log_readdir_res (uint32_t xid, nfsstat3 stat, int pstat, uint64_t cverf, -                      count3 count, int is_eof, const char *path) +nfs3_log_readdir_res(uint32_t xid, nfsstat3 stat, int pstat, uint64_t cverf, +                     count3 count, int is_eof, const char *path)  { -        char    errstr[1024]; -        int     ll = nfs3_loglevel (NFS3_READDIR, stat); +    char errstr[1024]; +    int ll = nfs3_loglevel(NFS3_READDIR, stat); -        if (THIS->ctx->log.loglevel < ll) -                return; -        nfs3_stat_to_errstr (xid, "READDIR", stat, pstat, errstr, sizeof (errstr)); -        if (ll == GF_LOG_DEBUG) -                gf_msg_debug (GF_NFS3, 0, -                              "%s => (%s), count: %"PRIu32", cverf: %"PRIu64 -                              ", is_eof: %d", path, errstr, count, cverf, -                              is_eof); -        else -                gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                        "%s => (%s), count: %"PRIu32", cverf: %"PRIu64 -                        ", is_eof: %d", path, errstr, count, cverf, is_eof); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, "READDIR", stat, pstat, errstr, sizeof(errstr)); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, +                     "%s => (%s), count: %" PRIu32 ", cverf: %" PRIu64 +                     ", is_eof: %d", +                     path, errstr, count, cverf, is_eof); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, +               "%s => (%s), count: %" PRIu32 ", cverf: %" PRIu64 ", is_eof: %d", +               path, errstr, count, cverf, is_eof);  }  void -nfs3_log_readdirp_res (uint32_t xid, nfsstat3 stat, int pstat, uint64_t cverf, -                       count3 dircount, count3 maxcount, int is_eof, -                       const char *path) +nfs3_log_readdirp_res(uint32_t xid, nfsstat3 stat, int pstat, uint64_t cverf, +                      count3 dircount, count3 maxcount, int is_eof, +                      const char *path)  { -        char    errstr[1024]; -        int	ll = nfs3_loglevel (NFS3_READDIRP, stat); - -        if (THIS->ctx->log.loglevel < ll) -                return; -        nfs3_stat_to_errstr (xid, "READDIRPLUS", stat, pstat, errstr, sizeof (errstr)); -        if (ll == GF_LOG_DEBUG) -                gf_msg_debug (GF_NFS3, 0, -                              "%s => (%s), dircount: %"PRIu32", maxcount: %" -                              PRIu32", cverf: %"PRIu64", is_eof: %d", path, -                              errstr, dircount, maxcount, cverf, is_eof); -        else -                gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                        "%s => (%s), dircount: %"PRIu32", maxcount: %" -                        PRIu32", cverf: %"PRIu64", is_eof: %d", path, errstr, -                        dircount, maxcount, cverf, is_eof); +    char errstr[1024]; +    int ll = nfs3_loglevel(NFS3_READDIRP, stat); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, "READDIRPLUS", stat, pstat, errstr, +                        sizeof(errstr)); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, +                     "%s => (%s), dircount: %" PRIu32 ", maxcount: %" PRIu32 +                     ", cverf: %" PRIu64 ", is_eof: %d", +                     path, errstr, dircount, maxcount, cverf, is_eof); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, +               "%s => (%s), dircount: %" PRIu32 ", maxcount: %" PRIu32 +               ", cverf: %" PRIu64 ", is_eof: %d", +               path, errstr, dircount, maxcount, cverf, is_eof);  }  void -nfs3_log_commit_res (uint32_t xid, nfsstat3 stat, int pstat, uint64_t wverf, -                     const char *path) +nfs3_log_commit_res(uint32_t xid, nfsstat3 stat, int pstat, uint64_t wverf, +                    const char *path)  { -        char    errstr[1024]; -        int	ll = nfs3_loglevel (NFS3_COMMIT, stat); - -        if (THIS->ctx->log.loglevel < ll) -                return; -        nfs3_stat_to_errstr (xid, "COMMIT", stat, pstat, errstr, sizeof (errstr)); -        if (ll == GF_LOG_DEBUG) -                gf_msg_debug (GF_NFS3, 0, "%s => (%s), wverf: %"PRIu64, -                              path, errstr, wverf); -        else -                gf_msg (GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, -                        "%s => (%s), wverf: %"PRIu64, path, errstr, wverf); +    char errstr[1024]; +    int ll = nfs3_loglevel(NFS3_COMMIT, stat); +    if (THIS->ctx->log.loglevel < ll) +        return; +    nfs3_stat_to_errstr(xid, "COMMIT", stat, pstat, errstr, sizeof(errstr)); +    if (ll == GF_LOG_DEBUG) +        gf_msg_debug(GF_NFS3, 0, "%s => (%s), wverf: %" PRIu64, path, errstr, +                     wverf); +    else +        gf_msg(GF_NFS3, ll, errno, NFS_MSG_STAT_ERROR, +               "%s => (%s), wverf: %" PRIu64, path, errstr, wverf);  }  void -nfs3_log_readdir_call (uint32_t xid, struct nfs3_fh *fh, count3 dircount, -                       count3 maxcount) +nfs3_log_readdir_call(uint32_t xid, struct nfs3_fh *fh, count3 dircount, +                      count3 maxcount)  { -        char    fhstr[1024]; +    char fhstr[1024]; -        if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) -                return; +    if (THIS->ctx->log.loglevel < GF_LOG_DEBUG) +        return; -        nfs3_fh_to_str (fh, fhstr, sizeof (fhstr)); +    nfs3_fh_to_str(fh, fhstr, sizeof(fhstr)); -        if (maxcount == 0) -                gf_msg_debug (GF_NFS3, 0, "XID: %x, READDIR: args: %s," -                                " count: %d", xid, fhstr, (uint32_t)dircount); -        else -                gf_msg_debug (GF_NFS3, 0, "XID: %x, READDIRPLUS: args: %s," -                                " dircount: %d, maxcount: %d", xid, fhstr, -                                (uint32_t)dircount, (uint32_t)maxcount); +    if (maxcount == 0) +        gf_msg_debug(GF_NFS3, 0, +                     "XID: %x, READDIR: args: %s," +                     " count: %d", +                     xid, fhstr, (uint32_t)dircount); +    else +        gf_msg_debug(GF_NFS3, 0, +                     "XID: %x, READDIRPLUS: args: %s," +                     " dircount: %d, maxcount: %d", +                     xid, fhstr, (uint32_t)dircount, (uint32_t)maxcount);  }  int -nfs3_fh_resolve_inode_done (nfs3_call_state_t *cs, inode_t *inode) +nfs3_fh_resolve_inode_done(nfs3_call_state_t *cs, inode_t *inode)  { -        int             ret = -EFAULT; +    int ret = -EFAULT; -        if ((!cs) || (!inode)) -                return ret; +    if ((!cs) || (!inode)) +        return ret; -        gf_msg_trace (GF_NFS3, 0, "FH inode resolved"); -        ret = nfs_inode_loc_fill (inode, &cs->resolvedloc, NFS_RESOLVE_EXIST); -        if (ret < 0) { -                gf_msg (GF_NFS3, GF_LOG_ERROR, -ret, -                                NFS_MSG_INODE_LOC_FILL_ERROR, -                                "inode loc fill failed"); -                goto err; -        } +    gf_msg_trace(GF_NFS3, 0, "FH inode resolved"); +    ret = nfs_inode_loc_fill(inode, &cs->resolvedloc, NFS_RESOLVE_EXIST); +    if (ret < 0) { +        gf_msg(GF_NFS3, GF_LOG_ERROR, -ret, NFS_MSG_INODE_LOC_FILL_ERROR, +               "inode loc fill failed"); +        goto err; +    } -        nfs3_call_resume (cs); +    nfs3_call_resume(cs);  err: -        return ret; +    return ret;  }  int32_t -nfs3_fh_resolve_entry_lookup_cbk (call_frame_t *frame, void *cookie, -                                  xlator_t *this, int32_t op_ret, -                                  int32_t op_errno, inode_t *inode, -                                  struct iatt *buf, dict_t *xattr, -                                  struct iatt *postparent) -{ -        nfs3_call_state_t       *cs = NULL; -        inode_t                 *linked_inode = NULL; - -        cs = frame->local; -        cs->resolve_ret = op_ret; -        cs->resolve_errno = op_errno; - -        if (op_ret == -1) { -                if (op_errno == ENOENT) { -                        gf_msg_trace (GF_NFS3, 0, "Lookup failed: %s: %s", -                                        cs->resolvedloc.path, -                                        strerror (op_errno)); -                } else { -                        gf_msg (GF_NFS3, GF_LOG_ERROR, op_errno, -                                        NFS_MSG_LOOKUP_FAIL, "Lookup failed: %s: %s", -                                        cs->resolvedloc.path, strerror (op_errno)); -                } -                goto err; -        } else -                gf_msg_trace (GF_NFS3, 0, "Entry looked up: %s", -                                cs->resolvedloc.path); - -       memcpy (&cs->stbuf, buf, sizeof (*buf)); -       memcpy (&cs->postparent, postparent, sizeof (*postparent)); -        linked_inode = inode_link (inode, cs->resolvedloc.parent, -                        cs->resolvedloc.name, buf); -        if (linked_inode) { -                nfs_fix_generation (this, linked_inode); -                inode_lookup (linked_inode); -                inode_unref (cs->resolvedloc.inode); -                cs->resolvedloc.inode = linked_inode; +nfs3_fh_resolve_entry_lookup_cbk(call_frame_t *frame, void *cookie, +                                 xlator_t *this, int32_t op_ret, +                                 int32_t op_errno, inode_t *inode, +                                 struct iatt *buf, dict_t *xattr, +                                 struct iatt *postparent) +{ +    nfs3_call_state_t *cs = NULL; +    inode_t *linked_inode = NULL; + +    cs = frame->local; +    cs->resolve_ret = op_ret; +    cs->resolve_errno = op_errno; + +    if (op_ret == -1) { +        if (op_errno == ENOENT) { +            gf_msg_trace(GF_NFS3, 0, "Lookup failed: %s: %s", +                         cs->resolvedloc.path, strerror(op_errno)); +        } else { +            gf_msg(GF_NFS3, GF_LOG_ERROR, op_errno, NFS_MSG_LOOKUP_FAIL, +                   "Lookup failed: %s: %s", cs->resolvedloc.path, +                   strerror(op_errno));          } +        goto err; +    } else +        gf_msg_trace(GF_NFS3, 0, "Entry looked up: %s", cs->resolvedloc.path); + +    memcpy(&cs->stbuf, buf, sizeof(*buf)); +    memcpy(&cs->postparent, postparent, sizeof(*postparent)); +    linked_inode = inode_link(inode, cs->resolvedloc.parent, +                              cs->resolvedloc.name, buf); +    if (linked_inode) { +        nfs_fix_generation(this, linked_inode); +        inode_lookup(linked_inode); +        inode_unref(cs->resolvedloc.inode); +        cs->resolvedloc.inode = linked_inode; +    }  err: -        nfs3_call_resume (cs); -        return 0; +    nfs3_call_resume(cs); +    return 0;  }  int32_t -nfs3_fh_resolve_inode_lookup_cbk (call_frame_t *frame, void *cookie, -                                  xlator_t *this, int32_t op_ret, -                                  int32_t op_errno, inode_t *inode, -                                  struct iatt *buf, dict_t *xattr, -                                  struct iatt *postparent) -{ -        nfs3_call_state_t       *cs = NULL; -        inode_t                 *linked_inode = NULL; - -        cs = frame->local; -        cs->resolve_ret = op_ret; -        cs->resolve_errno = op_errno; - -        if (op_ret == -1) { -                if (op_errno == ENOENT) { -                        gf_msg_trace (GF_NFS3, 0, "Lookup failed: %s: %s", -                                        cs->resolvedloc.path, -                                        strerror (op_errno)); -                } else { -                        gf_msg (GF_NFS3, GF_LOG_ERROR, op_errno, -                                        NFS_MSG_LOOKUP_FAIL, "Lookup failed: %s: %s", -                                        cs->resolvedloc.path, strerror (op_errno)); -                } -                nfs3_call_resume (cs); -                goto err; -        } +nfs3_fh_resolve_inode_lookup_cbk(call_frame_t *frame, void *cookie, +                                 xlator_t *this, int32_t op_ret, +                                 int32_t op_errno, inode_t *inode, +                                 struct iatt *buf, dict_t *xattr, +                                 struct iatt *postparent) +{ +    nfs3_call_state_t *cs = NULL; +    inode_t *linked_inode = NULL; -        memcpy (&cs->stbuf, buf, sizeof(*buf)); -        memcpy (&cs->postparent, buf, sizeof(*postparent)); -        linked_inode = inode_link (inode, cs->resolvedloc.parent, -                                   cs->resolvedloc.name, buf); -        if (linked_inode) { -                nfs_fix_generation (this, linked_inode); -                inode_lookup (linked_inode); -		inode_unref (cs->resolvedloc.inode); -		cs->resolvedloc.inode = linked_inode; -        } +    cs = frame->local; +    cs->resolve_ret = op_ret; +    cs->resolve_errno = op_errno; -        /* If it is an entry lookup and we landed in the callback for hard -         * inode resolution, it means the parent inode was not available and -         * had to be resolved first. Now that is done, lets head back into -         * entry resolution. -         */ -        if (cs->resolventry) -                nfs3_fh_resolve_entry_hard (cs); -	else -		nfs3_call_resume (cs); +    if (op_ret == -1) { +        if (op_errno == ENOENT) { +            gf_msg_trace(GF_NFS3, 0, "Lookup failed: %s: %s", +                         cs->resolvedloc.path, strerror(op_errno)); +        } else { +            gf_msg(GF_NFS3, GF_LOG_ERROR, op_errno, NFS_MSG_LOOKUP_FAIL, +                   "Lookup failed: %s: %s", cs->resolvedloc.path, +                   strerror(op_errno)); +        } +        nfs3_call_resume(cs); +        goto err; +    } + +    memcpy(&cs->stbuf, buf, sizeof(*buf)); +    memcpy(&cs->postparent, buf, sizeof(*postparent)); +    linked_inode = inode_link(inode, cs->resolvedloc.parent, +                              cs->resolvedloc.name, buf); +    if (linked_inode) { +        nfs_fix_generation(this, linked_inode); +        inode_lookup(linked_inode); +        inode_unref(cs->resolvedloc.inode); +        cs->resolvedloc.inode = linked_inode; +    } + +    /* If it is an entry lookup and we landed in the callback for hard +     * inode resolution, it means the parent inode was not available and +     * had to be resolved first. Now that is done, lets head back into +     * entry resolution. +     */ +    if (cs->resolventry) +        nfs3_fh_resolve_entry_hard(cs); +    else +        nfs3_call_resume(cs);  err: -        return 0; +    return 0;  } -  /* Needs no extra argument since it knows that the fh to be resolved is in   * resolvefh and that it needs to start looking from the root.   */  int -nfs3_fh_resolve_inode_hard (nfs3_call_state_t *cs) -{ -        int             ret = -EFAULT; -        nfs_user_t      nfu = {0, }; - -        if (!cs) -                return ret; - -        gf_msg_trace (GF_NFS3, 0, "FH hard resolution for: gfid 0x%s", -                      uuid_utoa (cs->resolvefh.gfid)); -	cs->hardresolved = 1; -        nfs_loc_wipe (&cs->resolvedloc); -        ret = nfs_gfid_loc_fill (cs->vol->itable, cs->resolvefh.gfid, -                                 &cs->resolvedloc, NFS_RESOLVE_CREATE); -        if (ret < 0) { -                gf_msg (GF_NFS3, GF_LOG_ERROR, -ret, -                        NFS_MSG_INODE_LOC_FILL_ERROR, -                        "Failed to fill loc using gfid: " -                        "%s", strerror (-ret)); -                goto out; -        } +nfs3_fh_resolve_inode_hard(nfs3_call_state_t *cs) +{ +    int ret = -EFAULT; +    nfs_user_t nfu = { +        0, +    }; -        nfs_user_root_create (&nfu); -        ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                          nfs3_fh_resolve_inode_lookup_cbk, cs); +    if (!cs) +        return ret; + +    gf_msg_trace(GF_NFS3, 0, "FH hard resolution for: gfid 0x%s", +                 uuid_utoa(cs->resolvefh.gfid)); +    cs->hardresolved = 1; +    nfs_loc_wipe(&cs->resolvedloc); +    ret = nfs_gfid_loc_fill(cs->vol->itable, cs->resolvefh.gfid, +                            &cs->resolvedloc, NFS_RESOLVE_CREATE); +    if (ret < 0) { +        gf_msg(GF_NFS3, GF_LOG_ERROR, -ret, NFS_MSG_INODE_LOC_FILL_ERROR, +               "Failed to fill loc using gfid: " +               "%s", +               strerror(-ret)); +        goto out; +    } + +    nfs_user_root_create(&nfu); +    ret = nfs_lookup(cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, +                     nfs3_fh_resolve_inode_lookup_cbk, cs);  out: -        return ret; +    return ret;  } -  int -nfs3_fh_resolve_entry_hard (nfs3_call_state_t *cs) -{ -        int                     ret             = -EFAULT; -        nfs_user_t              nfu             = {0, }; -        gf_boolean_t            freshlookup     = _gf_false; - -        if (!cs) -                return ret; - -        nfs_loc_wipe (&cs->resolvedloc); -        nfs_user_root_create (&nfu); -        gf_msg_trace (GF_NFS3, 0, "FH hard resolution: gfid: %s " -                      ", entry: %s", uuid_utoa (cs->resolvefh.gfid), -                      cs->resolventry); - -        ret = nfs_entry_loc_fill (cs->nfsx, cs->vol->itable, cs->resolvefh.gfid, -                                  cs->resolventry, &cs->resolvedloc, -                                  NFS_RESOLVE_CREATE, &freshlookup); - -        if (ret == -2) { -                gf_msg_trace (GF_NFS3, 0, "Entry needs lookup: %s", -                              cs->resolvedloc.path); -		/* If the NFS op is lookup, let the resume callback -		 * handle the sending of the lookup fop. Similarly, -		 * if the NFS op is create, let the create call -		 * go ahead in the resume callback so that an EEXIST gets -		 * handled at posix without an extra fop at this point. -		 */ -                if (freshlookup && (nfs3_lookup_op (cs) || -		    (nfs3_create_op (cs) && !nfs3_create_exclusive_op (cs)))) { -                        cs->lookuptype = GF_NFS3_FRESH; -                        cs->resolve_ret = 0; -                        cs->hardresolved = 0; -                        nfs3_call_resume (cs); -                } else { -			cs->hardresolved = 1; -                        nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                                    nfs3_fh_resolve_entry_lookup_cbk, cs); -		} -                ret = 0; -        } else if (ret == -1) { -                gf_msg_trace (GF_NFS3, 0, "Entry needs parent lookup: %s", -                              cs->resolvedloc.path); -                ret = nfs3_fh_resolve_inode_hard (cs); -        } else if (ret == 0) { -                cs->resolve_ret = 0; -                nfs3_call_resume (cs); -        } +nfs3_fh_resolve_entry_hard(nfs3_call_state_t *cs) +{ +    int ret = -EFAULT; +    nfs_user_t nfu = { +        0, +    }; +    gf_boolean_t freshlookup = _gf_false; +    if (!cs)          return ret; + +    nfs_loc_wipe(&cs->resolvedloc); +    nfs_user_root_create(&nfu); +    gf_msg_trace(GF_NFS3, 0, +                 "FH hard resolution: gfid: %s " +                 ", entry: %s", +                 uuid_utoa(cs->resolvefh.gfid), cs->resolventry); + +    ret = nfs_entry_loc_fill(cs->nfsx, cs->vol->itable, cs->resolvefh.gfid, +                             cs->resolventry, &cs->resolvedloc, +                             NFS_RESOLVE_CREATE, &freshlookup); + +    if (ret == -2) { +        gf_msg_trace(GF_NFS3, 0, "Entry needs lookup: %s", +                     cs->resolvedloc.path); +        /* If the NFS op is lookup, let the resume callback +         * handle the sending of the lookup fop. Similarly, +         * if the NFS op is create, let the create call +         * go ahead in the resume callback so that an EEXIST gets +         * handled at posix without an extra fop at this point. +         */ +        if (freshlookup && +            (nfs3_lookup_op(cs) || +             (nfs3_create_op(cs) && !nfs3_create_exclusive_op(cs)))) { +            cs->lookuptype = GF_NFS3_FRESH; +            cs->resolve_ret = 0; +            cs->hardresolved = 0; +            nfs3_call_resume(cs); +        } else { +            cs->hardresolved = 1; +            nfs_lookup(cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, +                       nfs3_fh_resolve_entry_lookup_cbk, cs); +        } +        ret = 0; +    } else if (ret == -1) { +        gf_msg_trace(GF_NFS3, 0, "Entry needs parent lookup: %s", +                     cs->resolvedloc.path); +        ret = nfs3_fh_resolve_inode_hard(cs); +    } else if (ret == 0) { +        cs->resolve_ret = 0; +        nfs3_call_resume(cs); +    } + +    return ret;  }  int -nfs3_fh_resolve_inode (nfs3_call_state_t *cs) +nfs3_fh_resolve_inode(nfs3_call_state_t *cs)  { -        inode_t         *inode = NULL; -        int             ret = -EFAULT; -        xlator_t        *this = NULL; +    inode_t *inode = NULL; +    int ret = -EFAULT; +    xlator_t *this = NULL; -        if (!cs) -                return ret; +    if (!cs) +        return ret; -        this = cs->nfsx; -        gf_msg_trace (GF_NFS3, 0, "FH needs inode resolution"); -        gf_uuid_copy (cs->resolvedloc.gfid, cs->resolvefh.gfid); +    this = cs->nfsx; +    gf_msg_trace(GF_NFS3, 0, "FH needs inode resolution"); +    gf_uuid_copy(cs->resolvedloc.gfid, cs->resolvefh.gfid); -        inode = inode_find (cs->vol->itable, cs->resolvefh.gfid); -        if (!inode || inode_ctx_get (inode, this, NULL)) -                ret = nfs3_fh_resolve_inode_hard (cs); -        else -                ret = nfs3_fh_resolve_inode_done (cs, inode); +    inode = inode_find(cs->vol->itable, cs->resolvefh.gfid); +    if (!inode || inode_ctx_get(inode, this, NULL)) +        ret = nfs3_fh_resolve_inode_hard(cs); +    else +        ret = nfs3_fh_resolve_inode_done(cs, inode); -        if (inode) -                inode_unref (inode); +    if (inode) +        inode_unref(inode); -        return ret; +    return ret;  }  int -nfs3_fh_resolve_entry (nfs3_call_state_t *cs) +nfs3_fh_resolve_entry(nfs3_call_state_t *cs)  { -        int     ret = -EFAULT; +    int ret = -EFAULT; -        if (!cs) -                return ret; +    if (!cs) +        return ret; -        return nfs3_fh_resolve_entry_hard (cs); +    return nfs3_fh_resolve_entry_hard(cs);  } -  int -nfs3_fh_resolve_resume (nfs3_call_state_t *cs) +nfs3_fh_resolve_resume(nfs3_call_state_t *cs)  { -        int     ret = -EFAULT; +    int ret = -EFAULT; -        if (!cs) -                return ret; +    if (!cs) +        return ret; -        if (cs->resolve_ret < 0) -                goto err_resume_call; +    if (cs->resolve_ret < 0) +        goto err_resume_call; -        if (!cs->resolventry) -                ret = nfs3_fh_resolve_inode (cs); -        else -                ret = nfs3_fh_resolve_entry (cs); +    if (!cs->resolventry) +        ret = nfs3_fh_resolve_inode(cs); +    else +        ret = nfs3_fh_resolve_entry(cs);  err_resume_call: -        if (ret < 0) { -                cs->resolve_ret = -1; -                cs->resolve_errno = EFAULT; -                nfs3_call_resume (cs); -                ret = 0; -        } +    if (ret < 0) { +        cs->resolve_ret = -1; +        cs->resolve_errno = EFAULT; +        nfs3_call_resume(cs); +        ret = 0; +    } -        return ret; +    return ret;  } -  int32_t -nfs3_fh_resolve_root_lookup_cbk (call_frame_t *frame, void *cookie, -                                 xlator_t *this, int32_t op_ret, -                                 int32_t op_errno, inode_t *inode, -                                 struct iatt *buf, dict_t *xattr, -                                 struct iatt *postparent) -{ -        nfs3_call_state_t       *cs = NULL; - -        cs = frame->local; -        cs->resolve_ret = op_ret; -        cs->resolve_errno = op_errno; - -        if (op_ret == -1) { -                gf_msg (GF_NFS3, GF_LOG_ERROR, op_errno, -                        NFS_MSG_LOOKUP_ROOT_FAIL, "Root lookup failed: %s", -                        strerror (op_errno)); -                goto err; -        } else -                gf_msg_trace (GF_NFS3, 0, "Root looked up: %s", -                              cs->resolvedloc.path); - -        nfs3_set_root_looked_up (cs->nfs3state, &cs->resolvefh); +nfs3_fh_resolve_root_lookup_cbk(call_frame_t *frame, void *cookie, +                                xlator_t *this, int32_t op_ret, +                                int32_t op_errno, inode_t *inode, +                                struct iatt *buf, dict_t *xattr, +                                struct iatt *postparent) +{ +    nfs3_call_state_t *cs = NULL; + +    cs = frame->local; +    cs->resolve_ret = op_ret; +    cs->resolve_errno = op_errno; + +    if (op_ret == -1) { +        gf_msg(GF_NFS3, GF_LOG_ERROR, op_errno, NFS_MSG_LOOKUP_ROOT_FAIL, +               "Root lookup failed: %s", strerror(op_errno)); +        goto err; +    } else +        gf_msg_trace(GF_NFS3, 0, "Root looked up: %s", cs->resolvedloc.path); + +    nfs3_set_root_looked_up(cs->nfs3state, &cs->resolvefh);  err: -        nfs3_fh_resolve_resume (cs); -        return 0; +    nfs3_fh_resolve_resume(cs); +    return 0;  } -  int -nfs3_fh_resolve_root (nfs3_call_state_t *cs) +nfs3_fh_resolve_root(nfs3_call_state_t *cs)  { -        int             ret = -EFAULT; -        nfs_user_t      nfu = {0, }; +    int ret = -EFAULT; +    nfs_user_t nfu = { +        0, +    }; -        if (!cs) -                return ret; +    if (!cs) +        return ret; -        if (nfs3_is_root_looked_up (cs->nfs3state, &cs->resolvefh)) { -                ret = nfs3_fh_resolve_resume (cs); -                goto out; -        } +    if (nfs3_is_root_looked_up(cs->nfs3state, &cs->resolvefh)) { +        ret = nfs3_fh_resolve_resume(cs); +        goto out; +    } -        nfs_user_root_create (&nfu); -        gf_msg_trace (GF_NFS3, 0, "Root needs lookup"); -        ret = nfs_root_loc_fill (cs->vol->itable, &cs->resolvedloc); -	if (ret < 0) { -		gf_msg (GF_NFS3, GF_LOG_ERROR, -ret, NFS_MSG_LOOKUP_ROOT_FAIL, -                        "Failed to lookup root from itable: %s", -                        strerror (-ret)); -		goto out; -	} +    nfs_user_root_create(&nfu); +    gf_msg_trace(GF_NFS3, 0, "Root needs lookup"); +    ret = nfs_root_loc_fill(cs->vol->itable, &cs->resolvedloc); +    if (ret < 0) { +        gf_msg(GF_NFS3, GF_LOG_ERROR, -ret, NFS_MSG_LOOKUP_ROOT_FAIL, +               "Failed to lookup root from itable: %s", strerror(-ret)); +        goto out; +    } -        ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                          nfs3_fh_resolve_root_lookup_cbk, cs); +    ret = nfs_lookup(cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, +                     nfs3_fh_resolve_root_lookup_cbk, cs);  out: -        return ret; +    return ret;  }  /** @@ -3944,25 +3835,27 @@ out:   * @req : The request to get host/peer from   */  int -__nfs3_fh_auth_get_peer (const rpcsvc_request_t *req, char *peer) -{ -        struct sockaddr_storage sastorage       = {0, }; -        rpc_transport_t         *trans          = NULL; -        int                     ret             = 0; - -        /* Why do we pass in the peer here and then -         * store it rather than malloc() and return a char * ? We want to avoid -         * heap allocations in the IO path as much as possible for speed -         * so we try to keep all allocations on the stack. -         */ -        trans = rpcsvc_request_transport (req); -        ret = rpcsvc_transport_peeraddr (trans, peer, RPCSVC_PEER_STRLEN, -                                         &sastorage, sizeof (sastorage)); -        if (ret != 0) { -                gf_msg (GF_NFS3, GF_LOG_WARNING, 0, NFS_MSG_GET_PEER_ADDR_FAIL, -                        "Failed to get peer addr: %s", gai_strerror (ret)); -        } -        return ret; +__nfs3_fh_auth_get_peer(const rpcsvc_request_t *req, char *peer) +{ +    struct sockaddr_storage sastorage = { +        0, +    }; +    rpc_transport_t *trans = NULL; +    int ret = 0; + +    /* Why do we pass in the peer here and then +     * store it rather than malloc() and return a char * ? We want to avoid +     * heap allocations in the IO path as much as possible for speed +     * so we try to keep all allocations on the stack. +     */ +    trans = rpcsvc_request_transport(req); +    ret = rpcsvc_transport_peeraddr(trans, peer, RPCSVC_PEER_STRLEN, &sastorage, +                                    sizeof(sastorage)); +    if (ret != 0) { +        gf_msg(GF_NFS3, GF_LOG_WARNING, 0, NFS_MSG_GET_PEER_ADDR_FAIL, +               "Failed to get peer addr: %s", gai_strerror(ret)); +    } +    return ret;  }  /* @@ -3975,44 +3868,44 @@ __nfs3_fh_auth_get_peer (const rpcsvc_request_t *req, char *peer)   *          -EROFS  for unauthorized write operations (rm, mkdir, write)   */  int -nfs3_fh_auth_nfsop (nfs3_call_state_t *cs, gf_boolean_t is_write_op) +nfs3_fh_auth_nfsop(nfs3_call_state_t *cs, gf_boolean_t is_write_op)  { -        struct nfs_state    *nfs = NULL; -        struct mount3_state *ms  = NULL; +    struct nfs_state *nfs = NULL; +    struct mount3_state *ms = NULL; -        nfs = (struct nfs_state *)cs->nfsx->private; -        ms  = (struct mount3_state *)nfs->mstate; -        return  mnt3_authenticate_request (ms, cs->req, &cs->resolvefh, NULL, -                                           NULL, NULL, NULL, is_write_op); +    nfs = (struct nfs_state *)cs->nfsx->private; +    ms = (struct mount3_state *)nfs->mstate; +    return mnt3_authenticate_request(ms, cs->req, &cs->resolvefh, NULL, NULL, +                                     NULL, NULL, is_write_op);  }  int -nfs3_fh_resolve_and_resume (nfs3_call_state_t *cs, struct nfs3_fh *fh, -                            char *entry, nfs3_resume_fn_t resum_fn) +nfs3_fh_resolve_and_resume(nfs3_call_state_t *cs, struct nfs3_fh *fh, +                           char *entry, nfs3_resume_fn_t resum_fn)  { -        int     ret = -EFAULT; +    int ret = -EFAULT; -        if ((!cs) || (!fh)) -                return ret; - -        cs->resume_fn = resum_fn; -        cs->resolvefh = *fh; -        cs->hashidx = 0; +    if ((!cs) || (!fh)) +        return ret; -        /* Check if the resolution is: -         * a. fh resolution -         * -         * or -         * -         * b. (fh, basename) resolution -         */ -        if (entry) {    /* b */ -                cs->resolventry = gf_strdup (entry); -                if (!cs->resolventry) -                        goto err; -        } +    cs->resume_fn = resum_fn; +    cs->resolvefh = *fh; +    cs->hashidx = 0; + +    /* Check if the resolution is: +     * a. fh resolution +     * +     * or +     * +     * b. (fh, basename) resolution +     */ +    if (entry) { /* b */ +        cs->resolventry = gf_strdup(entry); +        if (!cs->resolventry) +            goto err; +    } -        ret = nfs3_fh_resolve_root (cs); +    ret = nfs3_fh_resolve_root(cs);  err: -        return ret; +    return ret;  }  | 
