mirror of https://github.com/torvalds/linux.git
vfs-6.19-rc1.fixes
-----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRAhzRXHqcMeLMyaSiRxhvAZXjcogUCaTLXbgAKCRCRxhvAZXjc og6oAP9QnawWV/g0vFt8O+jODb/JE54A6Vdb3Ai5Pt+yEB6iVgD/Reu8OhB694tO 6j8j+lfPV35Z432VirfeKU7Vd4GUSwg= =HMln -----END PGP SIGNATURE----- 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()
This commit is contained in:
commit
4b9d25b4d3
|
|
@ -432,16 +432,6 @@ static int autofs_dev_ioctl_timeout(struct file *fp,
|
||||||
if (!autofs_type_indirect(sbi->type))
|
if (!autofs_type_indirect(sbi->type))
|
||||||
return -EINVAL;
|
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),
|
dentry = try_lookup_noperm(&QSTR_LEN(param->path, path_len),
|
||||||
base);
|
base);
|
||||||
if (IS_ERR_OR_NULL(dentry))
|
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->flags |= AUTOFS_INF_EXPIRE_SET;
|
||||||
ino->exp_timeout = timeout * HZ;
|
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);
|
dput(dentry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1968,7 +1968,7 @@ void iput(struct inode *inode)
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
lockdep_assert_not_held(&inode->i_lock);
|
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
|
* 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
|
* 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)
|
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);
|
VFS_BUG_ON_INODE(atomic_read(&inode->i_count) < 2, inode);
|
||||||
|
|
||||||
WARN_ON(atomic_sub_return(1, &inode->i_count) == 0);
|
WARN_ON(atomic_sub_return(1, &inode->i_count) == 0);
|
||||||
|
|
|
||||||
|
|
@ -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)
|
if (!sb->s_op->freeze_fs && !sb->s_op->freeze_super)
|
||||||
return;
|
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;
|
return;
|
||||||
|
|
||||||
if (!get_active_super(sb))
|
if (!get_active_super(sb))
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,7 @@
|
||||||
|
|
||||||
#include <asm/fcntl.h>
|
#include <asm/fcntl.h>
|
||||||
#include <linux/openat2.h>
|
#include <linux/openat2.h>
|
||||||
#ifdef __KERNEL__
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#else
|
|
||||||
#include <stdint.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0)
|
#define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0)
|
||||||
#define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1)
|
#define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1)
|
||||||
|
|
@ -90,9 +86,9 @@
|
||||||
|
|
||||||
/* Argument structure for F_GETDELEG and F_SETDELEG */
|
/* Argument structure for F_GETDELEG and F_SETDELEG */
|
||||||
struct delegation {
|
struct delegation {
|
||||||
uint32_t d_flags; /* Must be 0 */
|
__u32 d_flags; /* Must be 0 */
|
||||||
uint16_t d_type; /* F_RDLCK, F_WRLCK, F_UNLCK */
|
__u16 d_type; /* F_RDLCK, F_WRLCK, F_UNLCK */
|
||||||
uint16_t __pad; /* Must be 0 */
|
__u16 __pad; /* Must be 0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -887,7 +887,7 @@ static int prepare_open(struct dentry *dentry, int oflag, int ro,
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct file *mqueue_file_open(struct filename *name,
|
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)
|
umode_t mode, struct mq_attr *attr)
|
||||||
{
|
{
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
|
|
|
||||||
19
net/socket.c
19
net/socket.c
|
|
@ -503,12 +503,21 @@ EXPORT_SYMBOL(sock_alloc_file);
|
||||||
|
|
||||||
static int sock_map_fd(struct socket *sock, int flags)
|
static int sock_map_fd(struct socket *sock, int flags)
|
||||||
{
|
{
|
||||||
int fd;
|
struct file *newfile;
|
||||||
|
int fd = get_unused_fd_flags(flags);
|
||||||
fd = FD_ADD(flags, sock_alloc_file(sock, flags, NULL));
|
if (unlikely(fd < 0)) {
|
||||||
if (fd < 0)
|
|
||||||
sock_release(sock);
|
sock_release(sock);
|
||||||
return fd;
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
newfile = sock_alloc_file(sock, flags, NULL);
|
||||||
|
if (!IS_ERR(newfile)) {
|
||||||
|
fd_install(fd, newfile);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
put_unused_fd(fd);
|
||||||
|
return PTR_ERR(newfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue