From: Linus Torvalds Date: Mon, 13 May 2024 18:40:06 +0000 (-0700) Subject: Merge tag 'vfs-6.10.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=1b0aabcc9a35e729a6c7ce71e725fd63513b35de;p=linux.git Merge tag 'vfs-6.10.misc' of git://git./linux/kernel/git/vfs/vfs Pull misc vfs updates from Christian Brauner: "This contains the usual miscellaneous features, cleanups, and fixes for vfs and individual fses. Features: - Free up FMODE_* bits. I've freed up bits 6, 7, 8, and 24. That means we now have six free FMODE_* bits in total (but bit #6 already got used for FMODE_WRITE_RESTRICTED) - Add FOP_HUGE_PAGES flag (follow-up to FMODE_* cleanup) - Add fd_raw cleanup class so we can make use of automatic cleanup provided by CLASS(fd_raw, f)(fd) for O_PATH fds as well - Optimize seq_puts() - Simplify __seq_puts() - Add new anon_inode_getfile_fmode() api to allow specifying f_mode instead of open-coding it in multiple places - Annotate struct file_handle with __counted_by() and use struct_size() - Warn in get_file() whether f_count resurrection from zero is attempted (epoll/drm discussion) - Folio-sophize aio - Export the subvolume id in statx() for both btrfs and bcachefs - Relax linkat(AT_EMPTY_PATH) requirements - Add F_DUPFD_QUERY fcntl() allowing to compare two file descriptors for dup*() equality replacing kcmp() Cleanups: - Compile out swapfile inode checks when swap isn't enabled - Use (1 << n) notation for FMODE_* bitshifts for clarity - Remove redundant variable assignment in fs/direct-io - Cleanup uses of strncpy in orangefs - Speed up and cleanup writeback - Move fsparam_string_empty() helper into header since it's currently open-coded in multiple places - Add kernel-doc comments to proc_create_net_data_write() - Don't needlessly read dentry->d_flags twice Fixes: - Fix out-of-range warning in nilfs2 - Fix ecryptfs overflow due to wrong encryption packet size calculation - Fix overly long line in xfs file_operations (follow-up to FMODE_* cleanup) - Don't raise FOP_BUFFER_{R,W}ASYNC for directories in xfs (follow-up to FMODE_* cleanup) - Don't call xfs_file_open from xfs_dir_open (follow-up to FMODE_* cleanup) - Fix stable offset api to prevent endless loops - Fix afs file server rotations - Prevent xattr node from overflowing the eraseblock in jffs2 - Move fdinfo PTRACE_MODE_READ procfs check into the .permission() operation instead of .open() operation since this caused userspace regressions" * tag 'vfs-6.10.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: (39 commits) afs: Fix fileserver rotation getting stuck selftests: add F_DUPDFD_QUERY selftests fcntl: add F_DUPFD_QUERY fcntl() file: add fd_raw cleanup class fs: WARN when f_count resurrection is attempted seq_file: Simplify __seq_puts() seq_file: Optimize seq_puts() proc: Move fdinfo PTRACE_MODE_READ check into the inode .permission operation fs: Create anon_inode_getfile_fmode() xfs: don't call xfs_file_open from xfs_dir_open xfs: drop fop_flags for directories xfs: fix overly long line in the file_operations shmem: Fix shmem_rename2() libfs: Add simple_offset_rename() API libfs: Fix simple_offset_rename_exchange() jffs2: prevent xattr node from overflowing the eraseblock vfs, swap: compile out IS_SWAPFILE() on swapless configs vfs: relax linkat() AT_EMPTY_PATH - aka flink() - requirements fs/direct-io: remove redundant assignment to variable retval fs/dcache: Re-use value stored to dentry->d_flags instead of re-reading ... --- 1b0aabcc9a35e729a6c7ce71e725fd63513b35de diff --cc block/bdev.c index da2a167a4d08b,1322dfe32c5db..2af3dca56f3db --- a/block/bdev.c +++ b/block/bdev.c @@@ -912,11 -904,9 +912,11 @@@ int bdev_open(struct block_device *bdev disk_unblock_events(disk); bdev_file->f_flags |= O_LARGEFILE; - bdev_file->f_mode |= FMODE_BUF_RASYNC | FMODE_CAN_ODIRECT; + bdev_file->f_mode |= FMODE_CAN_ODIRECT; if (bdev_nowait(bdev)) bdev_file->f_mode |= FMODE_NOWAIT; + if (mode & BLK_OPEN_RESTRICT_WRITES) + bdev_file->f_mode |= FMODE_WRITE_RESTRICTED; bdev_file->f_mapping = bdev->bd_inode->i_mapping; bdev_file->f_wb_err = filemap_sample_wb_err(bdev_file->f_mapping); bdev_file->private_data = holder; diff --cc include/linux/fs.h index 8dfd53b52744a,5b351c1e6f588..de946a1fd845a --- a/include/linux/fs.h +++ b/include/linux/fs.h @@@ -110,23 -110,24 +110,26 @@@ typedef int (dio_iodone_t)(struct kioc */ /* file is open for reading */ - #define FMODE_READ ((__force fmode_t)0x1) + #define FMODE_READ ((__force fmode_t)(1 << 0)) /* file is open for writing */ - #define FMODE_WRITE ((__force fmode_t)0x2) + #define FMODE_WRITE ((__force fmode_t)(1 << 1)) /* file is seekable */ - #define FMODE_LSEEK ((__force fmode_t)0x4) + #define FMODE_LSEEK ((__force fmode_t)(1 << 2)) /* file can be accessed using pread */ - #define FMODE_PREAD ((__force fmode_t)0x8) + #define FMODE_PREAD ((__force fmode_t)(1 << 3)) /* file can be accessed using pwrite */ - #define FMODE_PWRITE ((__force fmode_t)0x10) + #define FMODE_PWRITE ((__force fmode_t)(1 << 4)) /* File is opened for execution with sys_execve / sys_uselib */ - #define FMODE_EXEC ((__force fmode_t)0x20) + #define FMODE_EXEC ((__force fmode_t)(1 << 5)) +/* File writes are restricted (block device specific) */ - #define FMODE_WRITE_RESTRICTED ((__force fmode_t)0x40) ++#define FMODE_WRITE_RESTRICTED ((__force fmode_t)(1 << 6)) + -/* FMODE_* bits 6 to 8 */ ++/* FMODE_* bits 7 to 8 */ + /* 32bit hashes as llseek() offset (for directories) */ - #define FMODE_32BITHASH ((__force fmode_t)0x200) + #define FMODE_32BITHASH ((__force fmode_t)(1 << 9)) /* 64bit hashes as llseek() offset (for directories) */ - #define FMODE_64BITHASH ((__force fmode_t)0x400) + #define FMODE_64BITHASH ((__force fmode_t)(1 << 10)) /* * Don't update ctime and mtime.