summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2015-02-27 15:30:04 +0100
committerNiels de Vos <ndevos@redhat.com>2015-02-28 09:30:03 -0800
commit32dd227726ce60b2e60b8df61ca174d96a1b8b34 (patch)
treebd50617f0a1a689ab01dffeec613701c58e7fe28
parent5b4755e9494b80f7b57c1515773991c962af0a2a (diff)
nfs: nfs3_stat_to_fattr3() improvement
During a review of backorti http://review.gluster.org/9170, Kaleb points out: ick, return-by-value. About 50% slower than passing a pointer to the target struct. Change-Id: I4464e6a4e50d82d446a834892d0308332b7c32d0 BUG: 1197142 Reported-by: Kaleb KEITHLEY <kkeithle@redhat.com> Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/9772 Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com>
-rw-r--r--xlators/nfs/server/src/acl3.c6
-rw-r--r--xlators/nfs/server/src/nfs3-helpers.c92
2 files changed, 47 insertions, 51 deletions
diff --git a/xlators/nfs/server/src/acl3.c b/xlators/nfs/server/src/acl3.c
index b00e8170ebd..b1e5d95d087 100644
--- a/xlators/nfs/server/src/acl3.c
+++ b/xlators/nfs/server/src/acl3.c
@@ -49,8 +49,8 @@ nfs3_call_state_init (struct nfs3_state *s, rpcsvc_request_t *req, xlator_t *v);
extern int
nfs3_fh_validate (struct nfs3_fh *fh);
-extern fattr3
-nfs3_stat_to_fattr3 (struct iatt *buf);
+extern void
+nfs3_stat_to_fattr3 (struct iatt *buf, fattr3 *fa);
#define acl3_validate_nfs3_state(request, state, status, label, retval) \
do { \
@@ -409,7 +409,7 @@ acl3_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
getaclreply->attr_follows = TRUE;
deviceid = nfs3_request_xlator_deviceid (cs->req);
nfs3_map_deviceid_to_statdev (buf, deviceid);
- getaclreply->attr = nfs3_stat_to_fattr3 (buf);
+ nfs3_stat_to_fattr3 (buf, &(getaclreply->attr));
nfs_request_user_init (&nfu, cs->req);
if (buf->ia_type == IA_IFDIR) {
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));
}