projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'sound-fix-5.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[linux-2.6-microblaze.git]
/
fs
/
xfs
/
xfs_acl.c
diff --git
a/fs/xfs/xfs_acl.c
b/fs/xfs/xfs_acl.c
index
c544951
..
779cb73
100644
(file)
--- a/
fs/xfs/xfs_acl.c
+++ b/
fs/xfs/xfs_acl.c
@@
-16,6
+16,7
@@
#include "xfs_acl.h"
#include "xfs_da_format.h"
#include "xfs_da_btree.h"
#include "xfs_acl.h"
#include "xfs_da_format.h"
#include "xfs_da_btree.h"
+#include "xfs_trans.h"
#include <linux/posix_acl_xattr.h>
#include <linux/posix_acl_xattr.h>
@@
-212,21
+213,28
@@
__xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
}
static int
}
static int
-xfs_set_mode(struct inode *inode, umode_t mode)
+xfs_acl_set_mode(
+ struct inode *inode,
+ umode_t mode)
{
{
-
int error = 0
;
-
- if (mode != inode->i_mode) {
-
struct iattr iatt
r;
+
struct xfs_inode *ip = XFS_I(inode)
;
+ struct xfs_mount *mp = ip->i_mount;
+ struct xfs_trans *tp;
+
int erro
r;
-
iattr.ia_valid = ATTR_MODE | ATTR_CTIME
;
- iattr.ia_mode = mode;
-
iattr.ia_ctime = current_time(inode)
;
+
error = xfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 0, 0, 0, &tp)
;
+ if (error)
+
return error
;
- error = xfs_setattr_nonsize(XFS_I(inode), &iattr, XFS_ATTR_NOACL);
- }
+ xfs_ilock(ip, XFS_ILOCK_EXCL);
+ xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
+ inode->i_mode = mode;
+ inode->i_ctime = current_time(inode);
+ xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
- return error;
+ if (mp->m_flags & XFS_MOUNT_WSYNC)
+ xfs_trans_set_sync(tp);
+ return xfs_trans_commit(tp);
}
int
}
int
@@
-251,18
+259,14
@@
xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
}
set_acl:
}
set_acl:
- error = __xfs_set_acl(inode, acl, type);
- if (error)
- return error;
-
/*
* We set the mode after successfully updating the ACL xattr because the
* xattr update can fail at ENOSPC and we don't want to change the mode
* if the ACL update hasn't been applied.
*/
/*
* We set the mode after successfully updating the ACL xattr because the
* xattr update can fail at ENOSPC and we don't want to change the mode
* if the ACL update hasn't been applied.
*/
- if (set_mode)
- error = xfs_set_mode(inode, mode);
-
+ error = __xfs_set_acl(inode, acl, type);
+ if (!error && set_mode && mode != inode->i_mode)
+ error = xfs_acl_set_mode(inode, mode);
return error;
}
return error;
}