Skip to content

Commit c37dba6

Browse files
committed
Merge tag 'fixes_for_v5.18-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull fs fixes from Jan Kara: "Three fixes that I'd still like to get to 5.18: - add a missing sanity check in the fanotify FAN_RENAME feature (added in 5.17, let's fix it before it gets wider usage in userspace) - udf fix for recently introduced filesystem corruption issue - writeback fix for a race in inode list handling that can lead to delayed writeback and possible dirty throttling stalls" * tag 'fixes_for_v5.18-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: udf: Avoid using stale lengthOfImpUse writeback: Avoid skipping inode writeback fanotify: do not allow setting dirent events in mask of non-dir
2 parents feb9c5e + c1ad35d commit c37dba6

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

fs/fs-writeback.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,6 +1712,10 @@ static int writeback_single_inode(struct inode *inode,
17121712
*/
17131713
if (!(inode->i_state & I_DIRTY_ALL))
17141714
inode_cgwb_move_to_attached(inode, wb);
1715+
else if (!(inode->i_state & I_SYNC_QUEUED) &&
1716+
(inode->i_state & I_DIRTY))
1717+
redirty_tail_locked(inode, wb);
1718+
17151719
spin_unlock(&wb->list_lock);
17161720
inode_sync_complete(inode);
17171721
out:

fs/notify/fanotify/fanotify_user.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,6 +1657,19 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,
16571657
else
16581658
mnt = path.mnt;
16591659

1660+
/*
1661+
* FAN_RENAME is not allowed on non-dir (for now).
1662+
* We shouldn't have allowed setting any dirent events in mask of
1663+
* non-dir, but because we always allowed it, error only if group
1664+
* was initialized with the new flag FAN_REPORT_TARGET_FID.
1665+
*/
1666+
ret = -ENOTDIR;
1667+
if (inode && !S_ISDIR(inode->i_mode) &&
1668+
((mask & FAN_RENAME) ||
1669+
((mask & FANOTIFY_DIRENT_EVENTS) &&
1670+
FAN_GROUP_FLAG(group, FAN_REPORT_TARGET_FID))))
1671+
goto path_put_and_out;
1672+
16601673
/* Mask out FAN_EVENT_ON_CHILD flag for sb/mount/non-dir marks */
16611674
if (mnt || !S_ISDIR(inode->i_mode)) {
16621675
mask &= ~FAN_EVENT_ON_CHILD;

fs/udf/namei.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi,
7575

7676
if (fileident) {
7777
if (adinicb || (offset + lfi < 0)) {
78-
memcpy(udf_get_fi_ident(sfi), fileident, lfi);
78+
memcpy(sfi->impUse + liu, fileident, lfi);
7979
} else if (offset >= 0) {
8080
memcpy(fibh->ebh->b_data + offset, fileident, lfi);
8181
} else {
82-
memcpy(udf_get_fi_ident(sfi), fileident, -offset);
82+
memcpy(sfi->impUse + liu, fileident, -offset);
8383
memcpy(fibh->ebh->b_data, fileident - offset,
8484
lfi + offset);
8585
}
@@ -88,11 +88,11 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi,
8888
offset += lfi;
8989

9090
if (adinicb || (offset + padlen < 0)) {
91-
memset(udf_get_fi_ident(sfi) + lfi, 0x00, padlen);
91+
memset(sfi->impUse + liu + lfi, 0x00, padlen);
9292
} else if (offset >= 0) {
9393
memset(fibh->ebh->b_data + offset, 0x00, padlen);
9494
} else {
95-
memset(udf_get_fi_ident(sfi) + lfi, 0x00, -offset);
95+
memset(sfi->impUse + liu + lfi, 0x00, -offset);
9696
memset(fibh->ebh->b_data, 0x00, padlen + offset);
9797
}
9898

0 commit comments

Comments
 (0)