mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Return an error code from zfs_acl_chmod_setattr
The FreeBSD implementation can fail, allow this function to fail and add the required error handling for Linux. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Matt Macy <mmacy@FreeBSD.org> Closes #9541
This commit is contained in:
parent
c4ae27c763
commit
156f74fc03
@ -220,7 +220,7 @@ int zfs_fastaccesschk_execute(struct znode *, cred_t *);
|
|||||||
extern int zfs_zaccess_rwx(struct znode *, mode_t, int, cred_t *);
|
extern int zfs_zaccess_rwx(struct znode *, mode_t, int, cred_t *);
|
||||||
extern int zfs_zaccess_unix(struct znode *, mode_t, cred_t *);
|
extern int zfs_zaccess_unix(struct znode *, mode_t, cred_t *);
|
||||||
extern int zfs_acl_access(struct znode *, int, cred_t *);
|
extern int zfs_acl_access(struct znode *, int, cred_t *);
|
||||||
void zfs_acl_chmod_setattr(struct znode *, zfs_acl_t **, uint64_t);
|
int zfs_acl_chmod_setattr(struct znode *, zfs_acl_t **, uint64_t);
|
||||||
int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *);
|
int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *);
|
||||||
int zfs_zaccess_rename(struct znode *, struct znode *,
|
int zfs_zaccess_rename(struct znode *, struct znode *,
|
||||||
struct znode *, struct znode *, cred_t *cr);
|
struct znode *, struct znode *, cred_t *cr);
|
||||||
|
@ -1570,7 +1570,7 @@ zfs_acl_chmod(zfsvfs_t *zfsvfs, uint64_t mode, zfs_acl_t *aclp)
|
|||||||
list_insert_tail(&aclp->z_acl, newnode);
|
list_insert_tail(&aclp->z_acl, newnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
zfs_acl_chmod_setattr(znode_t *zp, zfs_acl_t **aclp, uint64_t mode)
|
zfs_acl_chmod_setattr(znode_t *zp, zfs_acl_t **aclp, uint64_t mode)
|
||||||
{
|
{
|
||||||
mutex_enter(&zp->z_acl_lock);
|
mutex_enter(&zp->z_acl_lock);
|
||||||
@ -1581,6 +1581,8 @@ zfs_acl_chmod_setattr(znode_t *zp, zfs_acl_t **aclp, uint64_t mode)
|
|||||||
mutex_exit(&zp->z_lock);
|
mutex_exit(&zp->z_lock);
|
||||||
mutex_exit(&zp->z_acl_lock);
|
mutex_exit(&zp->z_acl_lock);
|
||||||
ASSERT(*aclp);
|
ASSERT(*aclp);
|
||||||
|
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3252,7 +3252,8 @@ top:
|
|||||||
uint64_t acl_obj;
|
uint64_t acl_obj;
|
||||||
new_mode = (pmode & S_IFMT) | (vap->va_mode & ~S_IFMT);
|
new_mode = (pmode & S_IFMT) | (vap->va_mode & ~S_IFMT);
|
||||||
|
|
||||||
zfs_acl_chmod_setattr(zp, &aclp, new_mode);
|
if ((err = zfs_acl_chmod_setattr(zp, &aclp, new_mode)))
|
||||||
|
goto out;
|
||||||
|
|
||||||
mutex_enter(&zp->z_lock);
|
mutex_enter(&zp->z_lock);
|
||||||
if (!zp->z_is_sa && ((acl_obj = zfs_external_acl(zp)) != 0)) {
|
if (!zp->z_is_sa && ((acl_obj = zfs_external_acl(zp)) != 0)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user