Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'xfs-6.11-fixes-3' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux

Pull xfs fixes from Chandan Babu:

- Check for presence of only 'attr' feature before scrubbing an inode's
attribute fork.

- Restore the behaviour of setting AIL thread to TASK_INTERRUPTIBLE for
long (i.e. 50ms) sleep durations to prevent high load averages.

- Do not allow users to change the realtime flag of a file unless the
datadev and rtdev both support fsdax access modes.

* tag 'xfs-6.11-fixes-3' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
xfs: conditionally allow FS_XFLAG_REALTIME changes if S_DAX is set
xfs: revert AIL TASK_KILLABLE threshold
xfs: attr forks require attr, not attr2

+24 -2
+7 -1
fs/xfs/scrub/bmap.c
··· 938 938 } 939 939 break; 940 940 case XFS_ATTR_FORK: 941 - if (!xfs_has_attr(mp) && !xfs_has_attr2(mp)) 941 + /* 942 + * "attr" means that an attr fork was created at some point in 943 + * the life of this filesystem. "attr2" means that inodes have 944 + * variable-sized data/attr fork areas. Hence we only check 945 + * attr here. 946 + */ 947 + if (!xfs_has_attr(mp)) 942 948 xchk_ino_set_corrupt(sc, sc->ip->i_ino); 943 949 break; 944 950 default:
+11
fs/xfs/xfs_ioctl.c
··· 483 483 /* Can't change realtime flag if any extents are allocated. */ 484 484 if (ip->i_df.if_nextents || ip->i_delayed_blks) 485 485 return -EINVAL; 486 + 487 + /* 488 + * If S_DAX is enabled on this file, we can only switch the 489 + * device if both support fsdax. We can't update S_DAX because 490 + * there might be other threads walking down the access paths. 491 + */ 492 + if (IS_DAX(VFS_I(ip)) && 493 + (mp->m_ddev_targp->bt_daxdev == NULL || 494 + (mp->m_rtdev_targp && 495 + mp->m_rtdev_targp->bt_daxdev == NULL))) 496 + return -EINVAL; 486 497 } 487 498 488 499 if (rtflag) {
+6 -1
fs/xfs/xfs_trans_ail.c
··· 644 644 set_freezable(); 645 645 646 646 while (1) { 647 - if (tout) 647 + /* 648 + * Long waits of 50ms or more occur when we've run out of items 649 + * to push, so we only want uninterruptible state if we're 650 + * actually blocked on something. 651 + */ 652 + if (tout && tout <= 20) 648 653 set_current_state(TASK_KILLABLE|TASK_FREEZABLE); 649 654 else 650 655 set_current_state(TASK_INTERRUPTIBLE|TASK_FREEZABLE);