[PATCH] s3/vfs/nfs4_acls: avoid a stat
Jeremy Allison
jra at samba.org
Mon Sep 26 20:37:41 UTC 2016
On Sun, Sep 11, 2016 at 04:10:57PM +0200, Ralph Böhme wrote:
> Hi!
>
> Not 100% sure about this one, but I think we can avoid a stat in the
> nfs4_acls and reuse the stat info from the files_struct or the
> smb_filename if it's valid.
>
> Please review & push if ok. Thanks!
LGTM. Pushed !
> From f1f35207637a43abaab2b0907dd71c2d9d8c531f Mon Sep 17 00:00:00 2001
> From: Ralph Boehme <slow at samba.org>
> Date: Sun, 11 Sep 2016 13:30:44 +0200
> Subject: [PATCH] s3/vfs/nfs4_acls: avoid a stat
>
> Signed-off-by: Ralph Boehme <slow at samba.org>
> ---
> source3/modules/nfs4_acls.c | 28 ++++++++++++++++++++++------
> 1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/source3/modules/nfs4_acls.c b/source3/modules/nfs4_acls.c
> index 71f4d8d..a954831 100644
> --- a/source3/modules/nfs4_acls.c
> +++ b/source3/modules/nfs4_acls.c
> @@ -529,11 +529,19 @@ NTSTATUS smb_fget_nt_acl_nfs4(files_struct *fsp,
> {
> SMB_STRUCT_STAT sbuf;
> struct smbacl4_vfs_params params;
> + SMB_STRUCT_STAT *psbuf = NULL;
>
> DEBUG(10, ("smb_fget_nt_acl_nfs4 invoked for %s\n", fsp_str_dbg(fsp)));
>
> - if (smbacl4_fGetFileOwner(fsp, &sbuf)) {
> - return map_nt_error_from_unix(errno);
> + if (VALID_STAT(fsp->fsp_name->st)) {
> + psbuf = &fsp->fsp_name->st;
> + }
> +
> + if (psbuf == NULL) {
> + if (smbacl4_fGetFileOwner(fsp, &sbuf)) {
> + return map_nt_error_from_unix(errno);
> + }
> + psbuf = &sbuf;
> }
>
> if (pparams == NULL) {
> @@ -544,7 +552,7 @@ NTSTATUS smb_fget_nt_acl_nfs4(files_struct *fsp,
> pparams = ¶ms;
> }
>
> - return smb_get_nt_acl_nfs4_common(&sbuf, pparams, security_info,
> + return smb_get_nt_acl_nfs4_common(psbuf, pparams, security_info,
> mem_ctx, ppdesc, theacl);
> }
>
> @@ -558,12 +566,20 @@ NTSTATUS smb_get_nt_acl_nfs4(struct connection_struct *conn,
> {
> SMB_STRUCT_STAT sbuf;
> struct smbacl4_vfs_params params;
> + const SMB_STRUCT_STAT *psbuf = NULL;
>
> DEBUG(10, ("smb_get_nt_acl_nfs4 invoked for %s\n",
> smb_fname->base_name));
>
> - if (smbacl4_GetFileOwner(conn, smb_fname, &sbuf)) {
> - return map_nt_error_from_unix(errno);
> + if (VALID_STAT(smb_fname->st)) {
> + psbuf = &smb_fname->st;
> + }
> +
> + if (psbuf == NULL) {
> + if (smbacl4_GetFileOwner(conn, smb_fname, &sbuf)) {
> + return map_nt_error_from_unix(errno);
> + }
> + psbuf = &sbuf;
> }
>
> if (pparams == NULL) {
> @@ -574,7 +590,7 @@ NTSTATUS smb_get_nt_acl_nfs4(struct connection_struct *conn,
> pparams = ¶ms;
> }
>
> - return smb_get_nt_acl_nfs4_common(&sbuf, pparams, security_info,
> + return smb_get_nt_acl_nfs4_common(psbuf, pparams, security_info,
> mem_ctx, ppdesc, theacl);
> }
>
> --
> 2.7.4
>
More information about the samba-technical
mailing list