Skip to content

Commit 16df6e0

Browse files
committed
Merge tag 'vfs-6.8.netfs' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs
Pull netfs updates from Christian Brauner: "This extends the netfs helper library that network filesystems can use to replace their own implementations. Both afs and 9p are ported. cifs is ready as well but the patches are way bigger and will be routed separately once this is merged. That will remove lots of code as well. The overal goal is to get high-level I/O and knowledge of the page cache and ouf of the filesystem drivers. This includes knowledge about the existence of pages and folios The pull request converts afs and 9p. This removes about 800 lines of code from afs and 300 from 9p. For 9p it is now possible to do writes in larger than a page chunks. Additionally, multipage folio support can be turned on for 9p. Separate patches exist for cifs removing another 2000+ lines. I've included detailed information in the individual pulls I took. Summary: - Add NFS-style (and Ceph-style) locking around DIO vs buffered I/O calls to prevent these from happening at the same time. - Support for direct and unbuffered I/O. - Support for write-through caching in the page cache. - O_*SYNC and RWF_*SYNC writes use write-through rather than writing to the page cache and then flushing afterwards. - Support for write-streaming. - Support for write grouping. - Skip reads for which the server could only return zeros or EOF. - The fscache module is now part of the netfs library and the corresponding maintainer entry is updated. - Some helpers from the fscache subsystem are renamed to mark them as belonging to the netfs library. - Follow-up fixes for the netfs library. - Follow-up fixes for the 9p conversion" * tag 'vfs-6.8.netfs' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs: (50 commits) netfs: Fix wrong #ifdef hiding wait cachefiles: Fix signed/unsigned mixup netfs: Fix the loop that unmarks folios after writing to the cache netfs: Fix interaction between write-streaming and cachefiles culling netfs: Count DIO writes netfs: Mark netfs_unbuffered_write_iter_locked() static netfs: Fix proc/fs/fscache symlink to point to "netfs" not "../netfs" netfs: Rearrange netfs_io_subrequest to put request pointer first 9p: Use length of data written to the server in preference to error 9p: Do a couple of cleanups 9p: Fix initialisation of netfs_inode for 9p cachefiles: Fix __cachefiles_prepare_write() 9p: Use netfslib read/write_iter afs: Use the netfs write helpers netfs: Export the netfs_sreq tracepoint netfs: Optimise away reads above the point at which there can be no data netfs: Implement a write-through caching option netfs: Provide a launder_folio implementation netfs: Provide a writepages implementation netfs, cachefiles: Pass upper bound length to allow expansion ...
2 parents 9d1694d + 1d5911d commit 16df6e0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+4158
-2180
lines changed

Documentation/filesystems/netfs_library.rst

+4-19
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ through which it can issue requests and negotiate::
295295
struct netfs_request_ops {
296296
void (*init_request)(struct netfs_io_request *rreq, struct file *file);
297297
void (*free_request)(struct netfs_io_request *rreq);
298-
int (*begin_cache_operation)(struct netfs_io_request *rreq);
299298
void (*expand_readahead)(struct netfs_io_request *rreq);
300299
bool (*clamp_length)(struct netfs_io_subrequest *subreq);
301300
void (*issue_read)(struct netfs_io_subrequest *subreq);
@@ -317,20 +316,6 @@ The operations are as follows:
317316
[Optional] This is called as the request is being deallocated so that the
318317
filesystem can clean up any state it has attached there.
319318

320-
* ``begin_cache_operation()``
321-
322-
[Optional] This is called to ask the network filesystem to call into the
323-
cache (if present) to initialise the caching state for this read. The netfs
324-
library module cannot access the cache directly, so the cache should call
325-
something like fscache_begin_read_operation() to do this.
326-
327-
The cache gets to store its state in ->cache_resources and must set a table
328-
of operations of its own there (though of a different type).
329-
330-
This should return 0 on success and an error code otherwise. If an error is
331-
reported, the operation may proceed anyway, just without local caching (only
332-
out of memory and interruption errors cause failure here).
333-
334319
* ``expand_readahead()``
335320

336321
[Optional] This is called to allow the filesystem to expand the size of a
@@ -460,14 +445,14 @@ When implementing a local cache to be used by the read helpers, two things are
460445
required: some way for the network filesystem to initialise the caching for a
461446
read request and a table of operations for the helpers to call.
462447

463-
The network filesystem's ->begin_cache_operation() method is called to set up a
464-
cache and this must call into the cache to do the work. If using fscache, for
465-
example, the cache would call::
448+
To begin a cache operation on an fscache object, the following function is
449+
called::
466450

467451
int fscache_begin_read_operation(struct netfs_io_request *rreq,
468452
struct fscache_cookie *cookie);
469453

470-
passing in the request pointer and the cookie corresponding to the file.
454+
passing in the request pointer and the cookie corresponding to the file. This
455+
fills in the cache resources mentioned below.
471456

472457
The netfs_io_request object contains a place for the cache to hang its
473458
state::

MAINTAINERS

+13-8
Original file line numberDiff line numberDiff line change
@@ -8214,6 +8214,19 @@ S: Supported
82148214
F: fs/iomap/
82158215
F: include/linux/iomap.h
82168216

8217+
FILESYSTEMS [NETFS LIBRARY]
8218+
M: David Howells <[email protected]>
8219+
L: [email protected] (moderated for non-subscribers)
8220+
8221+
S: Supported
8222+
F: Documentation/filesystems/caching/
8223+
F: Documentation/filesystems/netfs_library.rst
8224+
F: fs/netfs/
8225+
F: include/linux/fscache*.h
8226+
F: include/linux/netfs.h
8227+
F: include/trace/events/fscache.h
8228+
F: include/trace/events/netfs.h
8229+
82178230
FILESYSTEMS [STACKABLE]
82188231
M: Miklos Szeredi <[email protected]>
82198232
M: Amir Goldstein <[email protected]>
@@ -8659,14 +8672,6 @@ F: Documentation/power/freezing-of-tasks.rst
86598672
F: include/linux/freezer.h
86608673
F: kernel/freezer.c
86618674

8662-
FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS
8663-
M: David Howells <[email protected]>
8664-
L: [email protected] (moderated for non-subscribers)
8665-
S: Supported
8666-
F: Documentation/filesystems/caching/
8667-
F: fs/fscache/
8668-
F: include/linux/fscache*.h
8669-
86708675
FSCRYPT: FILE SYSTEM LEVEL ENCRYPTION SUPPORT
86718676
M: Eric Biggers <[email protected]>
86728677
M: Theodore Y. Ts'o <[email protected]>

arch/arm/configs/mxs_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ CONFIG_PWM_MXS=y
138138
CONFIG_NVMEM_MXS_OCOTP=y
139139
CONFIG_EXT4_FS=y
140140
# CONFIG_DNOTIFY is not set
141-
CONFIG_FSCACHE=m
141+
CONFIG_NETFS_SUPPORT=m
142+
CONFIG_FSCACHE=y
142143
CONFIG_FSCACHE_STATS=y
143144
CONFIG_CACHEFILES=m
144145
CONFIG_VFAT_FS=y

arch/csky/configs/defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ CONFIG_GENERIC_PHY=y
3434
CONFIG_EXT4_FS=y
3535
CONFIG_FANOTIFY=y
3636
CONFIG_QUOTA=y
37-
CONFIG_FSCACHE=m
37+
CONFIG_NETFS_SUPPORT=m
38+
CONFIG_FSCACHE=y
3839
CONFIG_FSCACHE_STATS=y
3940
CONFIG_CACHEFILES=m
4041
CONFIG_MSDOS_FS=y

arch/mips/configs/ip27_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,8 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
287287
CONFIG_QUOTA_NETLINK_INTERFACE=y
288288
CONFIG_FUSE_FS=m
289289
CONFIG_CUSE=m
290-
CONFIG_FSCACHE=m
290+
CONFIG_NETFS_SUPPORT=m
291+
CONFIG_FSCACHE=y
291292
CONFIG_FSCACHE_STATS=y
292293
CONFIG_CACHEFILES=m
293294
CONFIG_PROC_KCORE=y

arch/mips/configs/lemote2f_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ CONFIG_BTRFS_FS=m
238238
CONFIG_QUOTA=y
239239
CONFIG_QFMT_V2=m
240240
CONFIG_AUTOFS_FS=m
241-
CONFIG_FSCACHE=m
241+
CONFIG_NETFS_SUPPORT=m
242+
CONFIG_FSCACHE=y
242243
CONFIG_CACHEFILES=m
243244
CONFIG_ISO9660_FS=m
244245
CONFIG_JOLIET=y

arch/mips/configs/loongson3_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ CONFIG_QFMT_V2=m
356356
CONFIG_AUTOFS_FS=y
357357
CONFIG_FUSE_FS=m
358358
CONFIG_VIRTIO_FS=m
359-
CONFIG_FSCACHE=m
359+
CONFIG_NETFS_SUPPORT=m
360+
CONFIG_FSCACHE=y
360361
CONFIG_ISO9660_FS=m
361362
CONFIG_JOLIET=y
362363
CONFIG_MSDOS_FS=m

arch/mips/configs/pic32mzda_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ CONFIG_EXT4_FS_POSIX_ACL=y
6868
CONFIG_EXT4_FS_SECURITY=y
6969
CONFIG_AUTOFS_FS=m
7070
CONFIG_FUSE_FS=m
71-
CONFIG_FSCACHE=m
71+
CONFIG_NETFS_SUPPORT=m
72+
CONFIG_FSCACHE=y
7273
CONFIG_ISO9660_FS=m
7374
CONFIG_JOLIET=y
7475
CONFIG_ZISOFS=y

arch/s390/configs/debug_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -637,8 +637,9 @@ CONFIG_FUSE_FS=y
637637
CONFIG_CUSE=m
638638
CONFIG_VIRTIO_FS=m
639639
CONFIG_OVERLAY_FS=m
640+
CONFIG_NETFS_SUPPORT=m
640641
CONFIG_NETFS_STATS=y
641-
CONFIG_FSCACHE=m
642+
CONFIG_FSCACHE=y
642643
CONFIG_CACHEFILES=m
643644
CONFIG_ISO9660_FS=y
644645
CONFIG_JOLIET=y

arch/s390/configs/defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -622,8 +622,9 @@ CONFIG_FUSE_FS=y
622622
CONFIG_CUSE=m
623623
CONFIG_VIRTIO_FS=m
624624
CONFIG_OVERLAY_FS=m
625+
CONFIG_NETFS_SUPPORT=m
625626
CONFIG_NETFS_STATS=y
626-
CONFIG_FSCACHE=m
627+
CONFIG_FSCACHE=y
627628
CONFIG_CACHEFILES=m
628629
CONFIG_ISO9660_FS=y
629630
CONFIG_JOLIET=y

arch/sh/configs/sdk7786_defconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ CONFIG_BTRFS_FS=y
171171
CONFIG_AUTOFS_FS=m
172172
CONFIG_FUSE_FS=y
173173
CONFIG_CUSE=m
174-
CONFIG_FSCACHE=m
174+
CONFIG_NETFS_SUPPORT=m
175+
CONFIG_FSCACHE=y
175176
CONFIG_CACHEFILES=m
176177
CONFIG_ISO9660_FS=m
177178
CONFIG_JOLIET=y

fs/9p/v9fs_vfs.h

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ struct inode *v9fs_alloc_inode(struct super_block *sb);
4242
void v9fs_free_inode(struct inode *inode);
4343
struct inode *v9fs_get_inode(struct super_block *sb, umode_t mode,
4444
dev_t rdev);
45+
void v9fs_set_netfs_context(struct inode *inode);
4546
int v9fs_init_inode(struct v9fs_session_info *v9ses,
4647
struct inode *inode, umode_t mode, dev_t rdev);
4748
void v9fs_evict_inode(struct inode *inode);

0 commit comments

Comments
 (0)