From 32dd227726ce60b2e60b8df61ca174d96a1b8b34 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Fri, 27 Feb 2015 15:30:04 +0100 Subject: 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 Signed-off-by: Niels de Vos Reviewed-on: http://review.gluster.org/9772 Reviewed-by: Kaleb KEITHLEY Tested-by: Gluster Build System --- xlators/nfs/server/src/acl3.c | 6 +-- xlators/nfs/server/src/nfs3-helpers.c | 92 +++++++++++++++++------------------ 2 files changed, 47 insertions(+), 51 deletions(-) (limited to 'xlators/nfs') 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)); } -- cgit