diff options
Diffstat (limited to 'xlators/nfs/server/src/nfs3-helpers.c')
-rw-r--r-- | xlators/nfs/server/src/nfs3-helpers.c | 92 |
1 files changed, 44 insertions, 48 deletions
diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c index cba127b41da..f6c6eb52ad0 100644 --- a/xlators/nfs/server/src/nfs3-helpers.c +++ b/xlators/nfs/server/src/nfs3-helpers.c @@ -284,85 +284,82 @@ nfs3_fill_lookup3res_error (lookup3res *res, nfsstat3 stat, } -fattr3 -nfs3_stat_to_fattr3 (struct iatt *buf) +void +nfs3_stat_to_fattr3 (struct iatt *buf, fattr3 *fa) { - fattr3 fa = {0, }; - - if (buf == NULL) - goto out; + if (buf == NULL || fa == NULL) { + errno = EINVAL; + return; + } if (IA_ISDIR (buf->ia_type)) - fa.type = NF3DIR; + fa->type = NF3DIR; else if (IA_ISREG (buf->ia_type)) - fa.type = NF3REG; + fa->type = NF3REG; else if (IA_ISCHR (buf->ia_type)) - fa.type = NF3CHR; + fa->type = NF3CHR; else if (IA_ISBLK (buf->ia_type)) - fa.type = NF3BLK; + fa->type = NF3BLK; else if (IA_ISFIFO (buf->ia_type)) - fa.type = NF3FIFO; + fa->type = NF3FIFO; else if (IA_ISLNK (buf->ia_type)) - fa.type = NF3LNK; + fa->type = NF3LNK; else if (IA_ISSOCK (buf->ia_type)) - fa.type = NF3SOCK; + fa->type = NF3SOCK; if (IA_PROT_RUSR (buf->ia_prot)) - fa.mode |= NFS3MODE_ROWNER; + fa->mode |= NFS3MODE_ROWNER; if (IA_PROT_WUSR (buf->ia_prot)) - fa.mode |= NFS3MODE_WOWNER; + fa->mode |= NFS3MODE_WOWNER; if (IA_PROT_XUSR (buf->ia_prot)) - fa.mode |= NFS3MODE_XOWNER; + fa->mode |= NFS3MODE_XOWNER; if (IA_PROT_RGRP (buf->ia_prot)) - fa.mode |= NFS3MODE_RGROUP; + fa->mode |= NFS3MODE_RGROUP; if (IA_PROT_WGRP (buf->ia_prot)) - fa.mode |= NFS3MODE_WGROUP; + fa->mode |= NFS3MODE_WGROUP; if (IA_PROT_XGRP (buf->ia_prot)) - fa.mode |= NFS3MODE_XGROUP; + fa->mode |= NFS3MODE_XGROUP; if (IA_PROT_ROTH (buf->ia_prot)) - fa.mode |= NFS3MODE_ROTHER; + fa->mode |= NFS3MODE_ROTHER; if (IA_PROT_WOTH (buf->ia_prot)) - fa.mode |= NFS3MODE_WOTHER; + fa->mode |= NFS3MODE_WOTHER; if (IA_PROT_XOTH (buf->ia_prot)) - fa.mode |= NFS3MODE_XOTHER; + fa->mode |= NFS3MODE_XOTHER; if (IA_PROT_SUID (buf->ia_prot)) - fa.mode |= NFS3MODE_SETXUID; + fa->mode |= NFS3MODE_SETXUID; if (IA_PROT_SGID (buf->ia_prot)) - fa.mode |= NFS3MODE_SETXGID; + fa->mode |= NFS3MODE_SETXGID; if (IA_PROT_STCKY (buf->ia_prot)) - fa.mode |= NFS3MODE_SAVESWAPTXT; + 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); + 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); + 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->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->fsid = buf->ia_dev; + fa->fileid = nfs3_iatt_gfid_to_ino (buf); - fa.ctime.seconds = buf->ia_ctime; - fa.ctime.nseconds = buf->ia_ctime_nsec; + fa->atime.seconds = buf->ia_atime; + fa->atime.nseconds = buf->ia_atime_nsec; - fa.mtime.seconds = buf->ia_mtime; - fa.mtime.nseconds = buf->ia_mtime_nsec; + fa->ctime.seconds = buf->ia_ctime; + fa->ctime.nseconds = buf->ia_ctime_nsec; -out: - return fa; + fa->mtime.seconds = buf->ia_mtime; + fa->mtime.nseconds = buf->ia_mtime_nsec; } @@ -381,7 +378,7 @@ nfs3_stat_to_post_op_attr (struct iatt *buf) if (nfs_zero_filled_stat (buf)) goto out; - attr.post_op_attr_u.attributes = nfs3_stat_to_fattr3 (buf); + nfs3_stat_to_fattr3 (buf, &(attr.post_op_attr_u.attributes)); attr.attributes_follow = TRUE; out: @@ -472,8 +469,7 @@ nfs3_fill_getattr3res (getattr3res *res, nfsstat3 stat, struct iatt *buf, return; nfs3_map_deviceid_to_statdev (buf, deviceid); - res->getattr3res_u.resok.obj_attributes = nfs3_stat_to_fattr3 (buf); - + nfs3_stat_to_fattr3 (buf, &(res->getattr3res_u.resok.obj_attributes)); } |