* build direct-io.c conditionally
@ 2023-01-25 6:58 Christoph Hellwig
2023-01-25 6:58 ` [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c Christoph Hellwig
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Christoph Hellwig @ 2023-01-25 6:58 UTC (permalink / raw)
To: Alexander Viro, Andrew Morton; +Cc: Jan Kara, linux-fsdevel, linux-kernel
Hi all,
this series makes the build of direct-io.c conditional as only
about a dozen file systems actually use it.
Diffstat:
Kconfig | 4 ++++
Makefile | 3 ++-
affs/Kconfig | 1 +
direct-io.c | 24 ------------------------
exfat/Kconfig | 1 +
ext2/Kconfig | 1 +
fat/Kconfig | 1 +
hfs/Kconfig | 1 +
hfsplus/Kconfig | 1 +
internal.h | 4 +---
jfs/Kconfig | 1 +
nilfs2/Kconfig | 1 +
ntfs3/Kconfig | 1 +
ocfs2/Kconfig | 1 +
reiserfs/Kconfig | 1 +
super.c | 24 ++++++++++++++++++++++++
udf/Kconfig | 1 +
17 files changed, 43 insertions(+), 28 deletions(-)
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c 2023-01-25 6:58 build direct-io.c conditionally Christoph Hellwig @ 2023-01-25 6:58 ` Christoph Hellwig 2023-01-25 9:10 ` Jan Kara 2023-01-25 18:17 ` Eric Biggers 2023-01-25 6:58 ` [PATCH 2/2] fs: build the legacy direct I/O code conditionally Christoph Hellwig 2023-01-26 17:31 ` build direct-io.c conditionally Jens Axboe 2 siblings, 2 replies; 10+ messages in thread From: Christoph Hellwig @ 2023-01-25 6:58 UTC (permalink / raw) To: Alexander Viro, Andrew Morton; +Cc: Jan Kara, linux-fsdevel, linux-kernel sb_init_dio_done_wq is also used by the iomap code, so move it to super.c in preparation for building direct-io.c conditionally. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/direct-io.c | 24 ------------------------ fs/internal.h | 4 +--- fs/super.c | 24 ++++++++++++++++++++++++ 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/fs/direct-io.c b/fs/direct-io.c index 03d381377ae10a..ab0d7ea89813a6 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -558,30 +558,6 @@ static inline int dio_bio_reap(struct dio *dio, struct dio_submit *sdio) return ret; } -/* - * Create workqueue for deferred direct IO completions. We allocate the - * workqueue when it's first needed. This avoids creating workqueue for - * filesystems that don't need it and also allows us to create the workqueue - * late enough so the we can include s_id in the name of the workqueue. - */ -int sb_init_dio_done_wq(struct super_block *sb) -{ - struct workqueue_struct *old; - struct workqueue_struct *wq = alloc_workqueue("dio/%s", - WQ_MEM_RECLAIM, 0, - sb->s_id); - if (!wq) - return -ENOMEM; - /* - * This has to be atomic as more DIOs can race to create the workqueue - */ - old = cmpxchg(&sb->s_dio_done_wq, NULL, wq); - /* Someone created workqueue before us? Free ours... */ - if (old) - destroy_workqueue(wq); - return 0; -} - static int dio_set_defer_completion(struct dio *dio) { struct super_block *sb = dio->inode->i_sb; diff --git a/fs/internal.h b/fs/internal.h index a803cc3cf716ab..cb0c0749661aae 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -120,6 +120,7 @@ extern bool trylock_super(struct super_block *sb); struct super_block *user_get_super(dev_t, bool excl); void put_super(struct super_block *sb); extern bool mount_capable(struct fs_context *); +int sb_init_dio_done_wq(struct super_block *sb); /* * open.c @@ -187,9 +188,6 @@ extern void mnt_pin_kill(struct mount *m); */ extern const struct dentry_operations ns_dentry_operations; -/* direct-io.c: */ -int sb_init_dio_done_wq(struct super_block *sb); - /* * fs/stat.c: */ diff --git a/fs/super.c b/fs/super.c index 12c08cb20405d5..904adfbacdcf3c 100644 --- a/fs/super.c +++ b/fs/super.c @@ -1764,3 +1764,27 @@ int thaw_super(struct super_block *sb) return thaw_super_locked(sb); } EXPORT_SYMBOL(thaw_super); + +/* + * Create workqueue for deferred direct IO completions. We allocate the + * workqueue when it's first needed. This avoids creating workqueue for + * filesystems that don't need it and also allows us to create the workqueue + * late enough so the we can include s_id in the name of the workqueue. + */ +int sb_init_dio_done_wq(struct super_block *sb) +{ + struct workqueue_struct *old; + struct workqueue_struct *wq = alloc_workqueue("dio/%s", + WQ_MEM_RECLAIM, 0, + sb->s_id); + if (!wq) + return -ENOMEM; + /* + * This has to be atomic as more DIOs can race to create the workqueue + */ + old = cmpxchg(&sb->s_dio_done_wq, NULL, wq); + /* Someone created workqueue before us? Free ours... */ + if (old) + destroy_workqueue(wq); + return 0; +} -- 2.39.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c 2023-01-25 6:58 ` [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c Christoph Hellwig @ 2023-01-25 9:10 ` Jan Kara 2023-01-25 18:17 ` Eric Biggers 1 sibling, 0 replies; 10+ messages in thread From: Jan Kara @ 2023-01-25 9:10 UTC (permalink / raw) To: Christoph Hellwig Cc: Alexander Viro, Andrew Morton, Jan Kara, linux-fsdevel, linux-kernel On Wed 25-01-23 07:58:38, Christoph Hellwig wrote: > sb_init_dio_done_wq is also used by the iomap code, so move it to > super.c in preparation for building direct-io.c conditionally. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/direct-io.c | 24 ------------------------ > fs/internal.h | 4 +--- > fs/super.c | 24 ++++++++++++++++++++++++ > 3 files changed, 25 insertions(+), 27 deletions(-) > > diff --git a/fs/direct-io.c b/fs/direct-io.c > index 03d381377ae10a..ab0d7ea89813a6 100644 > --- a/fs/direct-io.c > +++ b/fs/direct-io.c > @@ -558,30 +558,6 @@ static inline int dio_bio_reap(struct dio *dio, struct dio_submit *sdio) > return ret; > } > > -/* > - * Create workqueue for deferred direct IO completions. We allocate the > - * workqueue when it's first needed. This avoids creating workqueue for > - * filesystems that don't need it and also allows us to create the workqueue > - * late enough so the we can include s_id in the name of the workqueue. > - */ > -int sb_init_dio_done_wq(struct super_block *sb) > -{ > - struct workqueue_struct *old; > - struct workqueue_struct *wq = alloc_workqueue("dio/%s", > - WQ_MEM_RECLAIM, 0, > - sb->s_id); > - if (!wq) > - return -ENOMEM; > - /* > - * This has to be atomic as more DIOs can race to create the workqueue > - */ > - old = cmpxchg(&sb->s_dio_done_wq, NULL, wq); > - /* Someone created workqueue before us? Free ours... */ > - if (old) > - destroy_workqueue(wq); > - return 0; > -} > - > static int dio_set_defer_completion(struct dio *dio) > { > struct super_block *sb = dio->inode->i_sb; > diff --git a/fs/internal.h b/fs/internal.h > index a803cc3cf716ab..cb0c0749661aae 100644 > --- a/fs/internal.h > +++ b/fs/internal.h > @@ -120,6 +120,7 @@ extern bool trylock_super(struct super_block *sb); > struct super_block *user_get_super(dev_t, bool excl); > void put_super(struct super_block *sb); > extern bool mount_capable(struct fs_context *); > +int sb_init_dio_done_wq(struct super_block *sb); > > /* > * open.c > @@ -187,9 +188,6 @@ extern void mnt_pin_kill(struct mount *m); > */ > extern const struct dentry_operations ns_dentry_operations; > > -/* direct-io.c: */ > -int sb_init_dio_done_wq(struct super_block *sb); > - > /* > * fs/stat.c: > */ > diff --git a/fs/super.c b/fs/super.c > index 12c08cb20405d5..904adfbacdcf3c 100644 > --- a/fs/super.c > +++ b/fs/super.c > @@ -1764,3 +1764,27 @@ int thaw_super(struct super_block *sb) > return thaw_super_locked(sb); > } > EXPORT_SYMBOL(thaw_super); > + > +/* > + * Create workqueue for deferred direct IO completions. We allocate the > + * workqueue when it's first needed. This avoids creating workqueue for > + * filesystems that don't need it and also allows us to create the workqueue > + * late enough so the we can include s_id in the name of the workqueue. > + */ > +int sb_init_dio_done_wq(struct super_block *sb) > +{ > + struct workqueue_struct *old; > + struct workqueue_struct *wq = alloc_workqueue("dio/%s", > + WQ_MEM_RECLAIM, 0, > + sb->s_id); > + if (!wq) > + return -ENOMEM; > + /* > + * This has to be atomic as more DIOs can race to create the workqueue > + */ > + old = cmpxchg(&sb->s_dio_done_wq, NULL, wq); > + /* Someone created workqueue before us? Free ours... */ > + if (old) > + destroy_workqueue(wq); > + return 0; > +} > -- > 2.39.0 > -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c 2023-01-25 6:58 ` [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c Christoph Hellwig 2023-01-25 9:10 ` Jan Kara @ 2023-01-25 18:17 ` Eric Biggers 1 sibling, 0 replies; 10+ messages in thread From: Eric Biggers @ 2023-01-25 18:17 UTC (permalink / raw) To: Christoph Hellwig Cc: Alexander Viro, Andrew Morton, Jan Kara, linux-fsdevel, linux-kernel On Wed, Jan 25, 2023 at 07:58:38AM +0100, Christoph Hellwig wrote: > sb_init_dio_done_wq is also used by the iomap code, so move it to > super.c in preparation for building direct-io.c conditionally. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > fs/direct-io.c | 24 ------------------------ > fs/internal.h | 4 +--- > fs/super.c | 24 ++++++++++++++++++++++++ > 3 files changed, 25 insertions(+), 27 deletions(-) > Reviewed-by: Eric Biggers <ebiggers@google.com> - Eric ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] fs: build the legacy direct I/O code conditionally 2023-01-25 6:58 build direct-io.c conditionally Christoph Hellwig 2023-01-25 6:58 ` [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c Christoph Hellwig @ 2023-01-25 6:58 ` Christoph Hellwig 2023-01-25 9:13 ` Jan Kara ` (2 more replies) 2023-01-26 17:31 ` build direct-io.c conditionally Jens Axboe 2 siblings, 3 replies; 10+ messages in thread From: Christoph Hellwig @ 2023-01-25 6:58 UTC (permalink / raw) To: Alexander Viro, Andrew Morton; +Cc: Jan Kara, linux-fsdevel, linux-kernel Add a new LEGACY_DIRECT_IO config symbol that is only selected by the file systems that still use the legacy blockdev_direct_IO code, so that kernels without support for those file systems don't need to build the code. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/Kconfig | 4 ++++ fs/Makefile | 3 ++- fs/affs/Kconfig | 1 + fs/exfat/Kconfig | 1 + fs/ext2/Kconfig | 1 + fs/fat/Kconfig | 1 + fs/hfs/Kconfig | 1 + fs/hfsplus/Kconfig | 1 + fs/jfs/Kconfig | 1 + fs/nilfs2/Kconfig | 1 + fs/ntfs3/Kconfig | 1 + fs/ocfs2/Kconfig | 1 + fs/reiserfs/Kconfig | 1 + fs/udf/Kconfig | 1 + 14 files changed, 18 insertions(+), 1 deletion(-) diff --git a/fs/Kconfig b/fs/Kconfig index 2685a4d0d35318..e99830c650336a 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -18,6 +18,10 @@ config VALIDATE_FS_PARSER config FS_IOMAP bool +# old blockdev_direct_IO implementation. Use iomap for new code instead +config LEGACY_DIRECT_IO + bool + if BLOCK source "fs/ext2/Kconfig" diff --git a/fs/Makefile b/fs/Makefile index 4dea17840761a0..606c029e1c9bc3 100644 --- a/fs/Makefile +++ b/fs/Makefile @@ -19,13 +19,14 @@ obj-y := open.o read_write.o file_table.o super.o \ kernel_read_file.o remap_range.o ifeq ($(CONFIG_BLOCK),y) -obj-y += buffer.o direct-io.o mpage.o +obj-y += buffer.o mpage.o else obj-y += no-block.o endif obj-$(CONFIG_PROC_FS) += proc_namespace.o +obj-$(CONFIG_LEGACY_DIRECT_IO) += direct-io.o obj-y += notify/ obj-$(CONFIG_EPOLL) += eventpoll.o obj-y += anon_inodes.o diff --git a/fs/affs/Kconfig b/fs/affs/Kconfig index eb9d0ab850cb1d..962b86374e1c15 100644 --- a/fs/affs/Kconfig +++ b/fs/affs/Kconfig @@ -2,6 +2,7 @@ config AFFS_FS tristate "Amiga FFS file system support" depends on BLOCK + select LEGACY_DIRECT_IO help The Fast File System (FFS) is the common file system used on hard disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y diff --git a/fs/exfat/Kconfig b/fs/exfat/Kconfig index 5a65071b5ecf10..147edeb044691d 100644 --- a/fs/exfat/Kconfig +++ b/fs/exfat/Kconfig @@ -3,6 +3,7 @@ config EXFAT_FS tristate "exFAT filesystem support" select NLS + select LEGACY_DIRECT_IO help This allows you to mount devices formatted with the exFAT file system. exFAT is typically used on SD-Cards or USB sticks. diff --git a/fs/ext2/Kconfig b/fs/ext2/Kconfig index 1248ff4ef56254..77393fda99af09 100644 --- a/fs/ext2/Kconfig +++ b/fs/ext2/Kconfig @@ -2,6 +2,7 @@ config EXT2_FS tristate "Second extended fs support" select FS_IOMAP + select LEGACY_DIRECT_IO help Ext2 is a standard Linux file system for hard disks. diff --git a/fs/fat/Kconfig b/fs/fat/Kconfig index 238cc55f84c429..afe83b4e717280 100644 --- a/fs/fat/Kconfig +++ b/fs/fat/Kconfig @@ -2,6 +2,7 @@ config FAT_FS tristate select NLS + select LEGACY_DIRECT_IO help If you want to use one of the FAT-based file systems (the MS-DOS and VFAT (Windows 95) file systems), then you must say Y or M here diff --git a/fs/hfs/Kconfig b/fs/hfs/Kconfig index 129926b5142d8f..d985066006d588 100644 --- a/fs/hfs/Kconfig +++ b/fs/hfs/Kconfig @@ -3,6 +3,7 @@ config HFS_FS tristate "Apple Macintosh file system support" depends on BLOCK select NLS + select LEGACY_DIRECT_IO help If you say Y here, you will be able to mount Macintosh-formatted floppy disks and hard drive partitions with full read-write access. diff --git a/fs/hfsplus/Kconfig b/fs/hfsplus/Kconfig index 7d4229aecec05b..8034e7827a690b 100644 --- a/fs/hfsplus/Kconfig +++ b/fs/hfsplus/Kconfig @@ -4,6 +4,7 @@ config HFSPLUS_FS depends on BLOCK select NLS select NLS_UTF8 + select LEGACY_DIRECT_IO help If you say Y here, you will be able to mount extended format Macintosh-formatted hard drive partitions with full read-write access. diff --git a/fs/jfs/Kconfig b/fs/jfs/Kconfig index 05cb0e8e4382ee..51e856f0e4b8d6 100644 --- a/fs/jfs/Kconfig +++ b/fs/jfs/Kconfig @@ -3,6 +3,7 @@ config JFS_FS tristate "JFS filesystem support" select NLS select CRC32 + select LEGACY_DIRECT_IO help This is a port of IBM's Journaled Filesystem . More information is available in the file <file:Documentation/admin-guide/jfs.rst>. diff --git a/fs/nilfs2/Kconfig b/fs/nilfs2/Kconfig index 254d102e79c99b..7d59567465e121 100644 --- a/fs/nilfs2/Kconfig +++ b/fs/nilfs2/Kconfig @@ -2,6 +2,7 @@ config NILFS2_FS tristate "NILFS2 file system support" select CRC32 + select LEGACY_DIRECT_IO help NILFS2 is a log-structured file system (LFS) supporting continuous snapshotting. In addition to versioning capability of the entire diff --git a/fs/ntfs3/Kconfig b/fs/ntfs3/Kconfig index 6e4cbc48ab8e43..96cc236f7f7bd3 100644 --- a/fs/ntfs3/Kconfig +++ b/fs/ntfs3/Kconfig @@ -2,6 +2,7 @@ config NTFS3_FS tristate "NTFS Read-Write file system support" select NLS + select LEGACY_DIRECT_IO help Windows OS native file system (NTFS) support up to NTFS version 3.1. diff --git a/fs/ocfs2/Kconfig b/fs/ocfs2/Kconfig index 5d11380d872417..304d12186ccd38 100644 --- a/fs/ocfs2/Kconfig +++ b/fs/ocfs2/Kconfig @@ -7,6 +7,7 @@ config OCFS2_FS select QUOTA select QUOTA_TREE select FS_POSIX_ACL + select LEGACY_DIRECT_IO help OCFS2 is a general purpose extent based shared disk cluster file system with many similarities to ext3. It supports 64 bit inode diff --git a/fs/reiserfs/Kconfig b/fs/reiserfs/Kconfig index 33c8b0dd07a2e7..4d22ecfe0fab65 100644 --- a/fs/reiserfs/Kconfig +++ b/fs/reiserfs/Kconfig @@ -2,6 +2,7 @@ config REISERFS_FS tristate "Reiserfs support (deprecated)" select CRC32 + select LEGACY_DIRECT_IO help Reiserfs is deprecated and scheduled to be removed from the kernel in 2025. If you are still using it, please migrate to another diff --git a/fs/udf/Kconfig b/fs/udf/Kconfig index 26e1a49f3ba795..82e8bfa2dfd989 100644 --- a/fs/udf/Kconfig +++ b/fs/udf/Kconfig @@ -3,6 +3,7 @@ config UDF_FS tristate "UDF file system support" select CRC_ITU_T select NLS + select LEGACY_DIRECT_IO help This is a file system used on some CD-ROMs and DVDs. Since the file system is supported by multiple operating systems and is more -- 2.39.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] fs: build the legacy direct I/O code conditionally 2023-01-25 6:58 ` [PATCH 2/2] fs: build the legacy direct I/O code conditionally Christoph Hellwig @ 2023-01-25 9:13 ` Jan Kara 2023-01-25 18:18 ` Eric Biggers 2023-01-26 21:20 ` Al Viro 2 siblings, 0 replies; 10+ messages in thread From: Jan Kara @ 2023-01-25 9:13 UTC (permalink / raw) To: Christoph Hellwig Cc: Alexander Viro, Andrew Morton, Jan Kara, linux-fsdevel, linux-kernel On Wed 25-01-23 07:58:39, Christoph Hellwig wrote: > Add a new LEGACY_DIRECT_IO config symbol that is only selected by the > file systems that still use the legacy blockdev_direct_IO code, so that > kernels without support for those file systems don't need to build the > code. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Looks good to me. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/Kconfig | 4 ++++ > fs/Makefile | 3 ++- > fs/affs/Kconfig | 1 + > fs/exfat/Kconfig | 1 + > fs/ext2/Kconfig | 1 + > fs/fat/Kconfig | 1 + > fs/hfs/Kconfig | 1 + > fs/hfsplus/Kconfig | 1 + > fs/jfs/Kconfig | 1 + > fs/nilfs2/Kconfig | 1 + > fs/ntfs3/Kconfig | 1 + > fs/ocfs2/Kconfig | 1 + > fs/reiserfs/Kconfig | 1 + > fs/udf/Kconfig | 1 + > 14 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/fs/Kconfig b/fs/Kconfig > index 2685a4d0d35318..e99830c650336a 100644 > --- a/fs/Kconfig > +++ b/fs/Kconfig > @@ -18,6 +18,10 @@ config VALIDATE_FS_PARSER > config FS_IOMAP > bool > > +# old blockdev_direct_IO implementation. Use iomap for new code instead > +config LEGACY_DIRECT_IO > + bool > + > if BLOCK > > source "fs/ext2/Kconfig" > diff --git a/fs/Makefile b/fs/Makefile > index 4dea17840761a0..606c029e1c9bc3 100644 > --- a/fs/Makefile > +++ b/fs/Makefile > @@ -19,13 +19,14 @@ obj-y := open.o read_write.o file_table.o super.o \ > kernel_read_file.o remap_range.o > > ifeq ($(CONFIG_BLOCK),y) > -obj-y += buffer.o direct-io.o mpage.o > +obj-y += buffer.o mpage.o > else > obj-y += no-block.o > endif > > obj-$(CONFIG_PROC_FS) += proc_namespace.o > > +obj-$(CONFIG_LEGACY_DIRECT_IO) += direct-io.o > obj-y += notify/ > obj-$(CONFIG_EPOLL) += eventpoll.o > obj-y += anon_inodes.o > diff --git a/fs/affs/Kconfig b/fs/affs/Kconfig > index eb9d0ab850cb1d..962b86374e1c15 100644 > --- a/fs/affs/Kconfig > +++ b/fs/affs/Kconfig > @@ -2,6 +2,7 @@ > config AFFS_FS > tristate "Amiga FFS file system support" > depends on BLOCK > + select LEGACY_DIRECT_IO > help > The Fast File System (FFS) is the common file system used on hard > disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y > diff --git a/fs/exfat/Kconfig b/fs/exfat/Kconfig > index 5a65071b5ecf10..147edeb044691d 100644 > --- a/fs/exfat/Kconfig > +++ b/fs/exfat/Kconfig > @@ -3,6 +3,7 @@ > config EXFAT_FS > tristate "exFAT filesystem support" > select NLS > + select LEGACY_DIRECT_IO > help > This allows you to mount devices formatted with the exFAT file system. > exFAT is typically used on SD-Cards or USB sticks. > diff --git a/fs/ext2/Kconfig b/fs/ext2/Kconfig > index 1248ff4ef56254..77393fda99af09 100644 > --- a/fs/ext2/Kconfig > +++ b/fs/ext2/Kconfig > @@ -2,6 +2,7 @@ > config EXT2_FS > tristate "Second extended fs support" > select FS_IOMAP > + select LEGACY_DIRECT_IO > help > Ext2 is a standard Linux file system for hard disks. > > diff --git a/fs/fat/Kconfig b/fs/fat/Kconfig > index 238cc55f84c429..afe83b4e717280 100644 > --- a/fs/fat/Kconfig > +++ b/fs/fat/Kconfig > @@ -2,6 +2,7 @@ > config FAT_FS > tristate > select NLS > + select LEGACY_DIRECT_IO > help > If you want to use one of the FAT-based file systems (the MS-DOS and > VFAT (Windows 95) file systems), then you must say Y or M here > diff --git a/fs/hfs/Kconfig b/fs/hfs/Kconfig > index 129926b5142d8f..d985066006d588 100644 > --- a/fs/hfs/Kconfig > +++ b/fs/hfs/Kconfig > @@ -3,6 +3,7 @@ config HFS_FS > tristate "Apple Macintosh file system support" > depends on BLOCK > select NLS > + select LEGACY_DIRECT_IO > help > If you say Y here, you will be able to mount Macintosh-formatted > floppy disks and hard drive partitions with full read-write access. > diff --git a/fs/hfsplus/Kconfig b/fs/hfsplus/Kconfig > index 7d4229aecec05b..8034e7827a690b 100644 > --- a/fs/hfsplus/Kconfig > +++ b/fs/hfsplus/Kconfig > @@ -4,6 +4,7 @@ config HFSPLUS_FS > depends on BLOCK > select NLS > select NLS_UTF8 > + select LEGACY_DIRECT_IO > help > If you say Y here, you will be able to mount extended format > Macintosh-formatted hard drive partitions with full read-write access. > diff --git a/fs/jfs/Kconfig b/fs/jfs/Kconfig > index 05cb0e8e4382ee..51e856f0e4b8d6 100644 > --- a/fs/jfs/Kconfig > +++ b/fs/jfs/Kconfig > @@ -3,6 +3,7 @@ config JFS_FS > tristate "JFS filesystem support" > select NLS > select CRC32 > + select LEGACY_DIRECT_IO > help > This is a port of IBM's Journaled Filesystem . More information is > available in the file <file:Documentation/admin-guide/jfs.rst>. > diff --git a/fs/nilfs2/Kconfig b/fs/nilfs2/Kconfig > index 254d102e79c99b..7d59567465e121 100644 > --- a/fs/nilfs2/Kconfig > +++ b/fs/nilfs2/Kconfig > @@ -2,6 +2,7 @@ > config NILFS2_FS > tristate "NILFS2 file system support" > select CRC32 > + select LEGACY_DIRECT_IO > help > NILFS2 is a log-structured file system (LFS) supporting continuous > snapshotting. In addition to versioning capability of the entire > diff --git a/fs/ntfs3/Kconfig b/fs/ntfs3/Kconfig > index 6e4cbc48ab8e43..96cc236f7f7bd3 100644 > --- a/fs/ntfs3/Kconfig > +++ b/fs/ntfs3/Kconfig > @@ -2,6 +2,7 @@ > config NTFS3_FS > tristate "NTFS Read-Write file system support" > select NLS > + select LEGACY_DIRECT_IO > help > Windows OS native file system (NTFS) support up to NTFS version 3.1. > > diff --git a/fs/ocfs2/Kconfig b/fs/ocfs2/Kconfig > index 5d11380d872417..304d12186ccd38 100644 > --- a/fs/ocfs2/Kconfig > +++ b/fs/ocfs2/Kconfig > @@ -7,6 +7,7 @@ config OCFS2_FS > select QUOTA > select QUOTA_TREE > select FS_POSIX_ACL > + select LEGACY_DIRECT_IO > help > OCFS2 is a general purpose extent based shared disk cluster file > system with many similarities to ext3. It supports 64 bit inode > diff --git a/fs/reiserfs/Kconfig b/fs/reiserfs/Kconfig > index 33c8b0dd07a2e7..4d22ecfe0fab65 100644 > --- a/fs/reiserfs/Kconfig > +++ b/fs/reiserfs/Kconfig > @@ -2,6 +2,7 @@ > config REISERFS_FS > tristate "Reiserfs support (deprecated)" > select CRC32 > + select LEGACY_DIRECT_IO > help > Reiserfs is deprecated and scheduled to be removed from the kernel > in 2025. If you are still using it, please migrate to another > diff --git a/fs/udf/Kconfig b/fs/udf/Kconfig > index 26e1a49f3ba795..82e8bfa2dfd989 100644 > --- a/fs/udf/Kconfig > +++ b/fs/udf/Kconfig > @@ -3,6 +3,7 @@ config UDF_FS > tristate "UDF file system support" > select CRC_ITU_T > select NLS > + select LEGACY_DIRECT_IO > help > This is a file system used on some CD-ROMs and DVDs. Since the > file system is supported by multiple operating systems and is more > -- > 2.39.0 > -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] fs: build the legacy direct I/O code conditionally 2023-01-25 6:58 ` [PATCH 2/2] fs: build the legacy direct I/O code conditionally Christoph Hellwig 2023-01-25 9:13 ` Jan Kara @ 2023-01-25 18:18 ` Eric Biggers 2023-01-26 21:20 ` Al Viro 2 siblings, 0 replies; 10+ messages in thread From: Eric Biggers @ 2023-01-25 18:18 UTC (permalink / raw) To: Christoph Hellwig Cc: Alexander Viro, Andrew Morton, Jan Kara, linux-fsdevel, linux-kernel On Wed, Jan 25, 2023 at 07:58:39AM +0100, Christoph Hellwig wrote: > Add a new LEGACY_DIRECT_IO config symbol that is only selected by the > file systems that still use the legacy blockdev_direct_IO code, so that > kernels without support for those file systems don't need to build the > code. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > fs/Kconfig | 4 ++++ > fs/Makefile | 3 ++- > fs/affs/Kconfig | 1 + > fs/exfat/Kconfig | 1 + > fs/ext2/Kconfig | 1 + > fs/fat/Kconfig | 1 + > fs/hfs/Kconfig | 1 + > fs/hfsplus/Kconfig | 1 + > fs/jfs/Kconfig | 1 + > fs/nilfs2/Kconfig | 1 + > fs/ntfs3/Kconfig | 1 + > fs/ocfs2/Kconfig | 1 + > fs/reiserfs/Kconfig | 1 + > fs/udf/Kconfig | 1 + > 14 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/fs/Kconfig b/fs/Kconfig > index 2685a4d0d35318..e99830c650336a 100644 > --- a/fs/Kconfig > +++ b/fs/Kconfig > @@ -18,6 +18,10 @@ config VALIDATE_FS_PARSER > config FS_IOMAP > bool > > +# old blockdev_direct_IO implementation. Use iomap for new code instead > +config LEGACY_DIRECT_IO > + bool > + > if BLOCK > Reviewed-by: Eric Biggers <ebiggers@google.com> - Eric ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] fs: build the legacy direct I/O code conditionally 2023-01-25 6:58 ` [PATCH 2/2] fs: build the legacy direct I/O code conditionally Christoph Hellwig 2023-01-25 9:13 ` Jan Kara 2023-01-25 18:18 ` Eric Biggers @ 2023-01-26 21:20 ` Al Viro 2023-01-27 6:30 ` Christoph Hellwig 2 siblings, 1 reply; 10+ messages in thread From: Al Viro @ 2023-01-26 21:20 UTC (permalink / raw) To: Christoph Hellwig; +Cc: Andrew Morton, Jan Kara, linux-fsdevel, linux-kernel On Wed, Jan 25, 2023 at 07:58:39AM +0100, Christoph Hellwig wrote: > Add a new LEGACY_DIRECT_IO config symbol that is only selected by the > file systems that still use the legacy blockdev_direct_IO code, so that > kernels without support for those file systems don't need to build the > code. Looks sane... FWIW, I've got this in the misc pile; doesn't seem to conflict anything in your series, thankfully... commit 193010cdc86da0126c58f58bbeacfcb5a15e6cee Author: Al Viro <viro@zeniv.linux.org.uk> Date: Thu Jan 19 19:22:22 2023 -0500 __blockdev_direct_IO(): get rid of submit_io callback always NULL... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> diff --git a/fs/direct-io.c b/fs/direct-io.c index 03d381377ae1..c2736da875cc 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -86,7 +86,6 @@ struct dio_submit { sector_t final_block_in_request;/* doesn't change */ int boundary; /* prev block is at a boundary */ get_block_t *get_block; /* block mapping function */ - dio_submit_t *submit_io; /* IO submition function */ loff_t logical_offset_in_bio; /* current first logical block in bio */ sector_t final_block_in_bio; /* current final block in bio + 1 */ @@ -431,10 +430,7 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio) dio->bio_disk = bio->bi_bdev->bd_disk; - if (sdio->submit_io) - sdio->submit_io(bio, dio->inode, sdio->logical_offset_in_bio); - else - submit_bio(bio); + submit_bio(bio); sdio->bio = NULL; sdio->boundary = 0; @@ -1122,7 +1118,7 @@ static inline int drop_refcount(struct dio *dio) ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, struct block_device *bdev, struct iov_iter *iter, get_block_t get_block, dio_iodone_t end_io, - dio_submit_t submit_io, int flags) + int flags) { unsigned i_blkbits = READ_ONCE(inode->i_blkbits); unsigned blkbits = i_blkbits; @@ -1239,7 +1235,6 @@ ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, sdio.get_block = get_block; dio->end_io = end_io; - sdio.submit_io = submit_io; sdio.final_block_in_bio = -1; sdio.next_block_for_io = -1; diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 1d65f6ef00ca..50448ba5fda8 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c @@ -2448,7 +2448,7 @@ static ssize_t ocfs2_direct_IO(struct kiocb *iocb, struct iov_iter *iter) return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter, get_block, - ocfs2_dio_end_io, NULL, 0); + ocfs2_dio_end_io, 0); } const struct address_space_operations ocfs2_aops = { diff --git a/include/linux/fs.h b/include/linux/fs.h index c1769a2c5d70..544b29a96fb0 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3205,7 +3205,7 @@ enum { ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, struct block_device *bdev, struct iov_iter *iter, get_block_t get_block, - dio_iodone_t end_io, dio_submit_t submit_io, + dio_iodone_t end_io, int flags); static inline ssize_t blockdev_direct_IO(struct kiocb *iocb, @@ -3214,7 +3214,7 @@ static inline ssize_t blockdev_direct_IO(struct kiocb *iocb, get_block_t get_block) { return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter, - get_block, NULL, NULL, DIO_LOCKING | DIO_SKIP_HOLES); + get_block, NULL, DIO_LOCKING | DIO_SKIP_HOLES); } #endif ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] fs: build the legacy direct I/O code conditionally 2023-01-26 21:20 ` Al Viro @ 2023-01-27 6:30 ` Christoph Hellwig 0 siblings, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2023-01-27 6:30 UTC (permalink / raw) To: Al Viro Cc: Christoph Hellwig, Andrew Morton, Jan Kara, linux-fsdevel, linux-kernel On Thu, Jan 26, 2023 at 09:20:20PM +0000, Al Viro wrote: > On Wed, Jan 25, 2023 at 07:58:39AM +0100, Christoph Hellwig wrote: > > Add a new LEGACY_DIRECT_IO config symbol that is only selected by the > > file systems that still use the legacy blockdev_direct_IO code, so that > > kernels without support for those file systems don't need to build the > > code. > > Looks sane... FWIW, I've got this in the misc pile; doesn't seem to > conflict anything in your series, thankfully... Yes, this looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> If someone had time to convert ocfs2 to iomap we could also kill the entire __blockdev_direct_IO variant. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: build direct-io.c conditionally 2023-01-25 6:58 build direct-io.c conditionally Christoph Hellwig 2023-01-25 6:58 ` [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c Christoph Hellwig 2023-01-25 6:58 ` [PATCH 2/2] fs: build the legacy direct I/O code conditionally Christoph Hellwig @ 2023-01-26 17:31 ` Jens Axboe 2 siblings, 0 replies; 10+ messages in thread From: Jens Axboe @ 2023-01-26 17:31 UTC (permalink / raw) To: Alexander Viro, Andrew Morton, Christoph Hellwig Cc: Jan Kara, linux-fsdevel, linux-kernel On Wed, 25 Jan 2023 07:58:37 +0100, Christoph Hellwig wrote: > this series makes the build of direct-io.c conditional as only > about a dozen file systems actually use it. > > Diffstat: > Kconfig | 4 ++++ > Makefile | 3 ++- > affs/Kconfig | 1 + > direct-io.c | 24 ------------------------ > exfat/Kconfig | 1 + > ext2/Kconfig | 1 + > fat/Kconfig | 1 + > hfs/Kconfig | 1 + > hfsplus/Kconfig | 1 + > internal.h | 4 +--- > jfs/Kconfig | 1 + > nilfs2/Kconfig | 1 + > ntfs3/Kconfig | 1 + > ocfs2/Kconfig | 1 + > reiserfs/Kconfig | 1 + > super.c | 24 ++++++++++++++++++++++++ > udf/Kconfig | 1 + > 17 files changed, 43 insertions(+), 28 deletions(-) > > [...] Applied, thanks! [1/2] fs: move sb_init_dio_done_wq out of direct-io.c commit: 439bc39b3cf0014b1b75075812f7ef0f8baa9674 [2/2] fs: build the legacy direct I/O code conditionally commit: 9636e650e16f6b01f0044f7662074958c23e4707 Best regards, -- Jens Axboe ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-01-27 6:30 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-25 6:58 build direct-io.c conditionally Christoph Hellwig 2023-01-25 6:58 ` [PATCH 1/2] fs: move sb_init_dio_done_wq out of direct-io.c Christoph Hellwig 2023-01-25 9:10 ` Jan Kara 2023-01-25 18:17 ` Eric Biggers 2023-01-25 6:58 ` [PATCH 2/2] fs: build the legacy direct I/O code conditionally Christoph Hellwig 2023-01-25 9:13 ` Jan Kara 2023-01-25 18:18 ` Eric Biggers 2023-01-26 21:20 ` Al Viro 2023-01-27 6:30 ` Christoph Hellwig 2023-01-26 17:31 ` build direct-io.c conditionally Jens Axboe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).