diff options
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index b56321b2b9f0..c4eca5ed5dab 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include "xfs_ialloc.h" | 42 | #include "xfs_ialloc.h" |
43 | #include "xfs_alloc.h" | 43 | #include "xfs_alloc.h" |
44 | #include "xfs_bmap.h" | 44 | #include "xfs_bmap.h" |
45 | #include "xfs_acl.h" | ||
45 | #include "xfs_attr.h" | 46 | #include "xfs_attr.h" |
46 | #include "xfs_rw.h" | 47 | #include "xfs_rw.h" |
47 | #include "xfs_error.h" | 48 | #include "xfs_error.h" |
@@ -467,8 +468,20 @@ xfs_setattr( | |||
467 | xfs_qm_dqrele(udqp); | 468 | xfs_qm_dqrele(udqp); |
468 | xfs_qm_dqrele(gdqp); | 469 | xfs_qm_dqrele(gdqp); |
469 | 470 | ||
470 | if (code) { | 471 | if (code) |
471 | return code; | 472 | return code; |
473 | |||
474 | /* | ||
475 | * XXX(hch): Updating the ACL entries is not atomic vs the i_mode | ||
476 | * update. We could avoid this with linked transactions | ||
477 | * and passing down the transaction pointer all the way | ||
478 | * to attr_set. No previous user of the generic | ||
479 | * Posix ACL code seems to care about this issue either. | ||
480 | */ | ||
481 | if ((mask & ATTR_MODE) && !(flags & XFS_ATTR_NOACL)) { | ||
482 | code = -xfs_acl_chmod(inode); | ||
483 | if (code) | ||
484 | return XFS_ERROR(code); | ||
472 | } | 485 | } |
473 | 486 | ||
474 | if (DM_EVENT_ENABLED(ip, DM_EVENT_ATTRIBUTE) && | 487 | if (DM_EVENT_ENABLED(ip, DM_EVENT_ATTRIBUTE) && |