.. | .. |
---|
215 | 215 | value, size, xattr_flags); |
---|
216 | 216 | |
---|
217 | 217 | kfree(value); |
---|
218 | | - if (!error) { |
---|
| 218 | + if (!error) |
---|
219 | 219 | set_cached_acl(inode, type, acl); |
---|
220 | | - } |
---|
221 | 220 | |
---|
222 | 221 | return error; |
---|
223 | 222 | } |
---|
.. | .. |
---|
243 | 242 | handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits); |
---|
244 | 243 | if (IS_ERR(handle)) |
---|
245 | 244 | return PTR_ERR(handle); |
---|
| 245 | + ext4_fc_start_update(inode); |
---|
246 | 246 | |
---|
247 | 247 | if ((type == ACL_TYPE_ACCESS) && acl) { |
---|
248 | 248 | error = posix_acl_update_mode(inode, &mode, &acl); |
---|
249 | 249 | if (error) |
---|
250 | 250 | goto out_stop; |
---|
251 | | - update_mode = 1; |
---|
| 251 | + if (mode != inode->i_mode) |
---|
| 252 | + update_mode = 1; |
---|
252 | 253 | } |
---|
253 | 254 | |
---|
254 | 255 | error = __ext4_set_acl(handle, inode, type, acl, 0 /* xattr_flags */); |
---|
255 | 256 | if (!error && update_mode) { |
---|
256 | 257 | inode->i_mode = mode; |
---|
257 | 258 | inode->i_ctime = current_time(inode); |
---|
258 | | - ext4_mark_inode_dirty(handle, inode); |
---|
| 259 | + error = ext4_mark_inode_dirty(handle, inode); |
---|
259 | 260 | } |
---|
260 | 261 | out_stop: |
---|
261 | 262 | ext4_journal_stop(handle); |
---|
| 263 | + ext4_fc_stop_update(inode); |
---|
262 | 264 | if (error == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) |
---|
263 | 265 | goto retry; |
---|
264 | 266 | return error; |
---|
.. | .. |
---|
284 | 286 | error = __ext4_set_acl(handle, inode, ACL_TYPE_DEFAULT, |
---|
285 | 287 | default_acl, XATTR_CREATE); |
---|
286 | 288 | posix_acl_release(default_acl); |
---|
| 289 | + } else { |
---|
| 290 | + inode->i_default_acl = NULL; |
---|
287 | 291 | } |
---|
288 | 292 | if (acl) { |
---|
289 | 293 | if (!error) |
---|
290 | 294 | error = __ext4_set_acl(handle, inode, ACL_TYPE_ACCESS, |
---|
291 | 295 | acl, XATTR_CREATE); |
---|
292 | 296 | posix_acl_release(acl); |
---|
| 297 | + } else { |
---|
| 298 | + inode->i_acl = NULL; |
---|
293 | 299 | } |
---|
294 | 300 | return error; |
---|
295 | 301 | } |
---|