On Sat, Oct 9, 2010 at 3:42 PM, Jeff Layton <jlayton@xxxxxxxxx> wrote: > On Thu, 7 Oct 2010 09:03:27 -0500 > shirishpargaonkar@xxxxxxxxx wrote: > >> From: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> >> >> >> Add extended attribute name system.cifsacl >> >> Get/generate cifs/ntfs acl blob and hand over to the invoker however >> it wants to parse/process it. >> >> Stop generating cifs/ntfs acl blob for xattr name system.posix_acl_access >> >> >> Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> >> --- >> fs/cifs/xattr.c | 64 +++++++++++++++++++++++++++++++++++++------------------ >> 1 files changed, 43 insertions(+), 21 deletions(-) >> >> diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c >> --- a/fs/cifs/xattr.c >> +++ b/fs/cifs/xattr.c <snip> >> +static int >> +get_cifs_acl(int xid, struct cifsTconInfo *pTcon, char *full_path, >> + void *ea_value, size_t size, struct nls_table *nls_cp) >> +{ >> + __u16 fid; >> + int rc; >> + int oplock = 0; >> + unsigned int acllen = 0; >> + struct cifs_ntsd *pacl = NULL; >> + >> + rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, GENERIC_READ, >> + 0, &fid, &oplock, NULL, nls_cp, 0); >> + if (rc) { >> + cERROR(1, "%s: file open error: %d", __func__, rc); >> + return rc; >> + } >> + > ^^^^ > Hmm possible oplock break. Wouldn't it be better to see if you already > have a readable filehandle before you do this? Yes - absolutely need to check for matching file handle >> + rc = CIFSSMBGetCIFSACL(xid, pTcon, fid, &pacl, &acllen); >> + CIFSSMBClose(xid, pTcon, fid); >> + if (rc) { >> + cERROR(1, "%s: get acl error: %d", __func__, rc); >> + return rc; >> + } >> + >> + if (ea_value) { >> + if (acllen > size) { >> + kfree(pacl); >> + return -ERANGE; >> + } >> + memcpy(ea_value, pacl, acllen); >> + kfree(pacl); >> + } >> + >> + return acllen; >> +} >> + >> int cifs_setxattr(struct dentry *direntry, const char *ea_name, >> const void *ea_value, size_t value_size, int flags) >> { >> @@ -277,27 +314,6 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name, >> cifs_sb->local_nls, >> cifs_sb->mnt_cifs_flags & >> CIFS_MOUNT_MAP_SPECIAL_CHR); >> -#ifdef CONFIG_CIFS_EXPERIMENTAL >> - else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) { >> - __u16 fid; >> - int oplock = 0; >> - struct cifs_ntsd *pacl = NULL; >> - __u32 buflen = 0; >> - if (experimEnabled) >> - rc = CIFSSMBOpen(xid, pTcon, full_path, >> - FILE_OPEN, GENERIC_READ, 0, &fid, >> - &oplock, NULL, cifs_sb->local_nls, >> - cifs_sb->mnt_cifs_flags & >> - CIFS_MOUNT_MAP_SPECIAL_CHR); >> - /* else rc is EOPNOTSUPP from above */ >> - >> - if (rc == 0) { >> - rc = CIFSSMBGetCIFSACL(xid, pTcon, fid, &pacl, >> - &buflen); >> - CIFSSMBClose(xid, pTcon, fid); >> - } >> - } >> -#endif /* EXPERIMENTAL */ >> #else >> cFYI(1, "query POSIX ACL not supported yet"); >> #endif /* CONFIG_CIFS_POSIX */ >> @@ -313,6 +329,12 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name, >> #else >> cFYI(1, "query POSIX default ACL not supported yet"); >> #endif >> +#ifdef CONFIG_CIFS_EXPERIMENTAL >> + } else if (strncmp(ea_name, CIFS_ACL_XATTR, >> + strlen(CIFS_ACL_XATTR)) == 0) { >> + rc = get_cifs_acl(xid, pTcon, full_path, ea_value, >> + buf_size, cifs_sb->local_nls); >> +#endif /* CONFIG_CIFS_EXPERIMENTAL */ >> } else if (strncmp(ea_name, >> CIFS_XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) == 0) { >> cFYI(1, "Trusted xattr namespace not supported yet"); > > I'd probably prefer not to see this new code wrapped in experimental > tags. I don't think that adds any real value, especially not with > something as simple as this. I agree - seems low risk as well. -- Thanks, Steve -- Thanks, Steve -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html