forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 958e46acc8e900e8569dd467c1af9b8d2d019394
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 }
....@@ -243,22 +242,25 @@
243242 handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
244243 if (IS_ERR(handle))
245244 return PTR_ERR(handle);
245
+ ext4_fc_start_update(inode);
246246
247247 if ((type == ACL_TYPE_ACCESS) && acl) {
248248 error = posix_acl_update_mode(inode, &mode, &acl);
249249 if (error)
250250 goto out_stop;
251
- update_mode = 1;
251
+ if (mode != inode->i_mode)
252
+ update_mode = 1;
252253 }
253254
254255 error = __ext4_set_acl(handle, inode, type, acl, 0 /* xattr_flags */);
255256 if (!error && update_mode) {
256257 inode->i_mode = mode;
257258 inode->i_ctime = current_time(inode);
258
- ext4_mark_inode_dirty(handle, inode);
259
+ error = ext4_mark_inode_dirty(handle, inode);
259260 }
260261 out_stop:
261262 ext4_journal_stop(handle);
263
+ ext4_fc_stop_update(inode);
262264 if (error == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
263265 goto retry;
264266 return error;
....@@ -284,12 +286,16 @@
284286 error = __ext4_set_acl(handle, inode, ACL_TYPE_DEFAULT,
285287 default_acl, XATTR_CREATE);
286288 posix_acl_release(default_acl);
289
+ } else {
290
+ inode->i_default_acl = NULL;
287291 }
288292 if (acl) {
289293 if (!error)
290294 error = __ext4_set_acl(handle, inode, ACL_TYPE_ACCESS,
291295 acl, XATTR_CREATE);
292296 posix_acl_release(acl);
297
+ } else {
298
+ inode->i_acl = NULL;
293299 }
294300 return error;
295301 }