Re: [linux-cifs-client] [PATCH 04/10] cifs: clean up set_cifs_acl interfaces

Shirish Pargaonkar <[email protected]>
Newsgroups gmane.linux.file-systems,gmane.linux.file-systems.cifs
Message-ID <[email protected]>
On Wed, May 27, 2009 at 3:34 PM, Jeff Layton <[email protected]> wrote:
> From: Christoph Hellwig <[email protected]>
>
> Signed-off-by: Christoph Hellwig <[email protected]>
> Signed-off-by: Jeff Layton <[email protected]>
> ---
>  fs/cifs/cifsacl.c |   78 ++++++++++++++++++++++++++++-------------------------
>  1 files changed, 41 insertions(+), 37 deletions(-)
>
> diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c
> index 7f8e6c4..1403b5d 100644
> --- a/fs/cifs/cifsacl.c
> +++ b/fs/cifs/cifsacl.c
> @@ -612,57 +612,61 @@ static struct cifs_ntsd *get_cifs_acl(struct cifs_sb_info *cifs_sb,
>        return pntsd;
>  }
>
> -/* Set an ACL on the server */
> -static int set_cifs_acl(struct cifs_ntsd *pnntsd, __u32 acllen,
> -                               struct inode *inode, const char *path)
> +static int set_cifs_acl_by_fid(struct cifs_sb_info *cifs_sb, __u16 fid,
> +               struct cifs_ntsd *pnntsd, u32 acllen)
>  {
> -       struct cifsFileInfo *open_file;
> -       bool unlock_file = false;
> -       int xid;
> -       int rc = -EIO;
> -       __u16 fid;
> -       struct super_block *sb;
> -       struct cifs_sb_info *cifs_sb;
> +       int xid, rc;
>
> -       cFYI(DBG2, ("set ACL for %s from mode 0x%x", path, inode->i_mode));
> +       xid = GetXid();
> +       rc = CIFSSMBSetCIFSACL(xid, cifs_sb->tcon, fid, pnntsd, acllen);
> +       FreeXid(xid);
>
> -       if (!inode)
> -               return rc;
> +       cFYI(DBG2, ("SetCIFSACL rc = %d", rc));
> +       return rc;
> +}
>
> -       sb = inode->i_sb;
> -       if (sb == NULL)
> -               return rc;
> +static int set_cifs_acl_by_path(struct cifs_sb_info *cifs_sb, const char *path,
> +               struct cifs_ntsd *pnntsd, u32 acllen)
> +{
> +       int oplock = 0;
> +       int xid, rc;
> +       __u16 fid;
>
> -       cifs_sb = CIFS_SB(sb);
>        xid = GetXid();
>
> -       open_file = find_readable_file(CIFS_I(inode));
> -       if (open_file) {
> -               unlock_file = true;
> -               fid = open_file->netfid;
> -       } else {
> -               int oplock = 0;
> -               /* open file */
> -               rc = CIFSSMBOpen(xid, cifs_sb->tcon, path, FILE_OPEN,
> -                               WRITE_DAC, 0, &fid, &oplock, NULL,
> -                               cifs_sb->local_nls, cifs_sb->mnt_cifs_flags &
> -                                       CIFS_MOUNT_MAP_SPECIAL_CHR);
> -               if (rc != 0) {
> -                       cERROR(1, ("Unable to open file to set ACL"));
> -                       FreeXid(xid);
> -                       return rc;
> -               }
> +       rc = CIFSSMBOpen(xid, cifs_sb->tcon, path, FILE_OPEN, WRITE_DAC, 0,
> +                        &fid, &oplock, NULL, cifs_sb->local_nls,
> +                        cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
> +       if (rc) {
> +               cERROR(1, ("Unable to open file to set ACL"));
> +               goto out;
>        }
>
>        rc = CIFSSMBSetCIFSACL(xid, cifs_sb->tcon, fid, pnntsd, acllen);
>        cFYI(DBG2, ("SetCIFSACL rc = %d", rc));
> -       if (unlock_file)
> -               atomic_dec(&open_file->wrtPending);
> -       else
> -               CIFSSMBClose(xid, cifs_sb->tcon, fid);
>
> +       CIFSSMBClose(xid, cifs_sb->tcon, fid);
> + out:
>        FreeXid(xid);
> +       return rc;
> +}
>
> +/* Set an ACL on the server */
> +static int set_cifs_acl(struct cifs_ntsd *pnntsd, __u32 acllen,
> +                               struct inode *inode, const char *path)
> +{
> +       struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
> +       struct cifsFileInfo *open_file;
> +       int rc;
> +
> +       cFYI(DBG2, ("set ACL for %s from mode 0x%x", path, inode->i_mode));
> +
> +       open_file = find_readable_file(CIFS_I(inode));
> +       if (!open_file)
> +               return set_cifs_acl_by_path(cifs_sb, path, pnntsd, acllen);
> +
> +       rc = set_cifs_acl_by_fid(cifs_sb, open_file->netfid, pnntsd, acllen);
> +       atomic_dec(&open_file->wrtPending);
>        return rc;
>  }
>
> --
> 1.6.2.2
>
> _______________________________________________
> linux-cifs-client mailing list
> [email protected]
> https://lists.samba.org/mailman/listinfo/linux-cifs-client
>

Looks good
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.