hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/fs/ext4/acl.c
....@@ -215,9 +215,8 @@
215215 value, size, xattr_flags);
216216
217217 kfree(value);
218
- if (!error) {
218
+ if (!error)
219219 set_cached_acl(inode, type, acl);
220
- }
221220
222221 return error;
223222 }
....@@ -248,14 +247,15 @@
248247 error = posix_acl_update_mode(inode, &mode, &acl);
249248 if (error)
250249 goto out_stop;
251
- update_mode = 1;
250
+ if (mode != inode->i_mode)
251
+ update_mode = 1;
252252 }
253253
254254 error = __ext4_set_acl(handle, inode, type, acl, 0 /* xattr_flags */);
255255 if (!error && update_mode) {
256256 inode->i_mode = mode;
257257 inode->i_ctime = current_time(inode);
258
- ext4_mark_inode_dirty(handle, inode);
258
+ error = ext4_mark_inode_dirty(handle, inode);
259259 }
260260 out_stop:
261261 ext4_journal_stop(handle);
....@@ -284,12 +284,16 @@
284284 error = __ext4_set_acl(handle, inode, ACL_TYPE_DEFAULT,
285285 default_acl, XATTR_CREATE);
286286 posix_acl_release(default_acl);
287
+ } else {
288
+ inode->i_default_acl = NULL;
287289 }
288290 if (acl) {
289291 if (!error)
290292 error = __ext4_set_acl(handle, inode, ACL_TYPE_ACCESS,
291293 acl, XATTR_CREATE);
292294 posix_acl_release(acl);
295
+ } else {
296
+ inode->i_acl = NULL;
293297 }
294298 return error;
295299 }