Commit 4b9d25b4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'vfs-6.19-rc1.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs

Pull vfs fixes from Christian Brauner:

 - Fix a type conversion bug in the ipc subsystem

 - Fix per-dentry timeout warning in autofs

 - Drop the fd conversion from sockets

 - Move assert from iput_not_last() to iput()

 - Fix reversed check in filesystems_freeze_callback()

 - Use proper uapi types for new struct delegation definitions

* tag 'vfs-6.19-rc1.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
  vfs: use UAPI types for new struct delegation definition
  mqueue: correct the type of ro to int
  Revert "net/socket: convert sock_map_fd() to FD_ADD()"
  autofs: fix per-dentry timeout warning
  fs: assert on I_FREEING not being set in iput() and iput_not_last()
  fs: PM: Fix reverse check in filesystems_freeze_callback()
parents e40e0235 fe93446b
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -432,16 +432,6 @@ static int autofs_dev_ioctl_timeout(struct file *fp,
		if (!autofs_type_indirect(sbi->type))
			return -EINVAL;

		/* An expire timeout greater than the superblock timeout
		 * could be a problem at shutdown but the super block
		 * timeout itself can change so all we can really do is
		 * warn the user.
		 */
		if (timeout >= sbi->exp_timeout)
			pr_warn("per-mount expire timeout is greater than "
				"the parent autofs mount timeout which could "
				"prevent shutdown\n");

		dentry = try_lookup_noperm(&QSTR_LEN(param->path, path_len),
					   base);
		if (IS_ERR_OR_NULL(dentry))
@@ -470,6 +460,18 @@ static int autofs_dev_ioctl_timeout(struct file *fp,
			ino->flags |= AUTOFS_INF_EXPIRE_SET;
			ino->exp_timeout = timeout * HZ;
		}

		/* An expire timeout greater than the superblock timeout
		 * could be a problem at shutdown but the super block
		 * timeout itself can change so all we can really do is
		 * warn the user.
		 */
		if (ino->flags & AUTOFS_INF_EXPIRE_SET &&
		    ino->exp_timeout > sbi->exp_timeout)
			pr_warn("per-mount expire timeout is greater than "
				"the parent autofs mount timeout which could "
				"prevent shutdown\n");

		dput(dentry);
	}

+2 −1
Original line number Diff line number Diff line
@@ -1968,7 +1968,7 @@ void iput(struct inode *inode)

retry:
	lockdep_assert_not_held(&inode->i_lock);
	VFS_BUG_ON_INODE(inode_state_read_once(inode) & I_CLEAR, inode);
	VFS_BUG_ON_INODE(inode_state_read_once(inode) & (I_FREEING | I_CLEAR), inode);
	/*
	 * Note this assert is technically racy as if the count is bogusly
	 * equal to one, then two CPUs racing to further drop it can both
@@ -2010,6 +2010,7 @@ EXPORT_SYMBOL(iput);
 */
void iput_not_last(struct inode *inode)
{
	VFS_BUG_ON_INODE(inode_state_read_once(inode) & (I_FREEING | I_CLEAR), inode);
	VFS_BUG_ON_INODE(atomic_read(&inode->i_count) < 2, inode);

	WARN_ON(atomic_sub_return(1, &inode->i_count) == 0);
+1 −1
Original line number Diff line number Diff line
@@ -1189,7 +1189,7 @@ static void filesystems_freeze_callback(struct super_block *sb, void *freeze_all
	if (!sb->s_op->freeze_fs && !sb->s_op->freeze_super)
		return;

	if (freeze_all_ptr && !(sb->s_type->fs_flags & FS_POWER_FREEZE))
	if (!freeze_all_ptr && !(sb->s_type->fs_flags & FS_POWER_FREEZE))
		return;

	if (!get_active_super(sb))
+3 −7
Original line number Diff line number Diff line
@@ -4,11 +4,7 @@

#include <asm/fcntl.h>
#include <linux/openat2.h>
#ifdef __KERNEL__
#include <linux/types.h>
#else
#include <stdint.h>
#endif

#define F_SETLEASE	(F_LINUX_SPECIFIC_BASE + 0)
#define F_GETLEASE	(F_LINUX_SPECIFIC_BASE + 1)
@@ -90,9 +86,9 @@

/* Argument structure for F_GETDELEG and F_SETDELEG */
struct delegation {
	uint32_t	d_flags;	/* Must be 0 */
	uint16_t	d_type;		/* F_RDLCK, F_WRLCK, F_UNLCK */
	uint16_t	__pad;		/* Must be 0 */
	__u32	d_flags;	/* Must be 0 */
	__u16	d_type;		/* F_RDLCK, F_WRLCK, F_UNLCK */
	__u16	__pad;		/* Must be 0 */
};

/*
+1 −1
Original line number Diff line number Diff line
@@ -887,7 +887,7 @@ static int prepare_open(struct dentry *dentry, int oflag, int ro,
}

static struct file *mqueue_file_open(struct filename *name,
				     struct vfsmount *mnt, int oflag, bool ro,
				     struct vfsmount *mnt, int oflag, int ro,
				     umode_t mode, struct mq_attr *attr)
{
	struct dentry *dentry;
Loading