Linux network filesystem support library
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: David Howells <dhowells@redhat.com>
Cc: Christian Brauner <christian@brauner.io>,
	Matthew Wilcox <willy@infradead.org>,
	Christoph Hellwig <hch@infradead.org>,
	Paulo Alcantara <pc@manguebit.org>, Jens Axboe <axboe@kernel.dk>,
	Leon Romanovsky <leon@kernel.org>,
	Steve French <sfrench@samba.org>,
	ChenXiaoSong <chenxiaosong@chenxiaosong.com>,
	Marc Dionne <marc.dionne@auristor.com>,
	Eric Van Hensbergen <ericvh@kernel.org>,
	Dominique Martinet <asmadeus@codewreck.org>,
	Ilya Dryomov <idryomov@gmail.com>,
	Trond Myklebust <trondmy@kernel.org>,
	netfs@lists.linux.dev, linux-afs@lists.infradead.org,
	linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org,
	ceph-devel@vger.kernel.org, v9fs@lists.linux.dev,
	linux-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 00/21] netfs: Keep track of folios in a segmented bio_vec[] chain
Date: Tue, 19 May 2026 09:15:45 +0100	[thread overview]
Message-ID: <20260519091545.171c4b85@pumpkin> (raw)
In-Reply-To: <20260518222959.488126-1-dhowells@redhat.com>

On Mon, 18 May 2026 23:29:32 +0100
David Howells <dhowells@redhat.com> wrote:

> Hi Christian,
> 
> Could you add these patches to the VFS tree for next?
> 
> The patches get rid of folio_queue, rolling_buffer and ITER_FOLIOQ,
> replacing the folio queue construct used to manage buffers in netfslib with
> one based around a segmented chain of bio_vec arrays instead.  There are
> three main aims here:
> 
>  (1) The kernel file I/O subsystem seems to be moving towards consolidating
>      on the use of bio_vec arrays, so embrace this by moving netfslib to
>      keep track of its buffers for buffered I/O in bio_vec[] form.
> 
>  (2) Netfslib already uses a bio_vec[] to handle unbuffered/DIO, so the
>      number of different buffering schemes used can be reduced to just a
>      single one.
> 
>  (3) Always send an entire filesystem RPC request message to a TCP socket
>      with single kernel_sendmsg() call as this is faster, more efficient
>      and doesn't require the use of corking as it puts the entire
>      transmission loop inside of a single tcp_sendmsg().
> 
> For the replacement of folio_queue, a segmented chain of bio_vec arrays
> rather than a single monolithic array is provided:
> 
> 	struct bvecq {
> 		struct bvecq		*next;
> 		struct bvecq		*prev;
> 		unsigned long long	fpos;
> 		refcount_t		ref;
> 		u32			priv;
> 		u16			nr_segs;
> 		u16			max_segs;
> 		enum bvecq_mem		mem_type:2;
> 		bool			inline_bv:1;
> 		bool			discontig:1;

There doesn't seem to be any point using bitfields.
There is a massive hole here anyway.

> 		struct bio_vec		*bv;
> 		struct bio_vec		__bv[];
> 	};
> 
> The fields are:
> 
>  (1) next, prev - Link segments together in a list.  I want this to be
>      NULL-terminated linear rather than circular to make it possible to
>      arbitrarily glue bits on the front.

Do you ever need to follow the list backwards?
If not making prev point to the pointer to the entry (probably a tailq?)
makes the logic simpler (and safer) because you can remove an item without
knowing whether it is the head or which list it is on.

> 
>  (2) fpos, discontig - Note the current file position of the first byte of
>      the segment; all the bio_vecs in ->bv[] must be contiguous in the file
>      space.  The fpos can be used to find the folio by file position rather
>      then from the info in the bio_vec.

Should fpos be off_t (or u64) rather than 'long long' (they are all the
same underlying type).

>      If there's a discontiguity, this should break over into a new bvecq
>      segment with the discontig flag set (though this is redundant if you
>      keep track of the file position).  Note that the beginning and end
>      file positions in a segment need not be aligned to any filesystem
>      block size.

At this point you lose me :-)

-- David

  parent reply	other threads:[~2026-05-19  8:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-18 22:29 [PATCH v2 00/21] netfs: Keep track of folios in a segmented bio_vec[] chain David Howells
2026-05-18 22:29 ` [PATCH v2 01/21] cachefiles: Don't rely on backing fs storage map for most use cases David Howells
2026-05-18 22:29 ` [PATCH v2 02/21] netfs: Add the cache object ID to netfs_read/write tracepoints David Howells
2026-05-18 22:29 ` [PATCH v2 03/21] mm: Make readahead store folio count in readahead_control David Howells
2026-05-18 22:29 ` [PATCH v2 04/21] netfs: Bulk load the readahead-provided folios up front David Howells
2026-05-18 22:29 ` [PATCH v2 05/21] Add a function to kmap one page of a multipage bio_vec David Howells
2026-05-25  6:13   ` Christoph Hellwig
2026-06-04 14:25     ` David Howells
2026-05-18 22:29 ` [PATCH v2 06/21] iov_iter: Make iov_iter_get_pages*() wrap iov_iter_extract_pages() David Howells
2026-05-25  6:13   ` Christoph Hellwig
2026-06-04 14:26     ` David Howells
2026-05-18 22:29 ` [PATCH v2 07/21] iov_iter: Add a segmented queue of bio_vec[] David Howells
2026-05-18 22:29 ` [PATCH v2 08/21] netfs: Add some tools for managing bvecq chains David Howells
2026-05-18 22:29 ` [PATCH v2 09/21] netfs: Add a function to extract from an iter into a bvecq David Howells
2026-05-18 22:29 ` [PATCH v2 10/21] afs: Use a bvecq to hold dir content rather than folioq David Howells
2026-05-18 22:29 ` [PATCH v2 11/21] cifs: Use a bvecq for buffering instead of a folioq David Howells
2026-05-18 22:29 ` [PATCH v2 12/21] cifs: Support ITER_BVECQ in smb_extract_iter_to_rdma() David Howells
2026-05-19  8:18   ` Stefan Metzmacher
2026-05-18 22:29 ` [PATCH v2 13/21] netfs: Switch to using bvecq rather than folio_queue and rolling_buffer David Howells
2026-05-18 22:29 ` [PATCH v2 14/21] cifs: Remove support for ITER_FOLIOQ from smb_extract_iter_to_rdma() David Howells
2026-05-19  8:19   ` Stefan Metzmacher
2026-05-18 22:29 ` [PATCH v2 15/21] netfs: Remove netfs_alloc/free_folioq_buffer() David Howells
2026-05-18 22:29 ` [PATCH v2 16/21] netfs: Remove netfs_extract_user_iter() David Howells
2026-05-18 22:29 ` [PATCH v2 17/21] iov_iter: Remove ITER_FOLIOQ David Howells
2026-05-18 22:29 ` [PATCH v2 18/21] netfs: Remove folio_queue and rolling_buffer David Howells
2026-05-18 22:29 ` [PATCH v2 19/21] netfs: Check for too much data being read David Howells
2026-05-18 22:29 ` [PATCH v2 20/21] netfs: Limit the minimum trigger for progress reporting David Howells
2026-05-18 22:29 ` [PATCH v2 21/21] netfs: Combine prepare and issue ops and grab the buffers on request David Howells
2026-05-19  8:15 ` David Laight [this message]
2026-05-19  8:56   ` [PATCH v2 00/21] netfs: Keep track of folios in a segmented bio_vec[] chain David Howells

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260519091545.171c4b85@pumpkin \
    --to=david.laight.linux@gmail.com \
    --cc=asmadeus@codewreck.org \
    --cc=axboe@kernel.dk \
    --cc=ceph-devel@vger.kernel.org \
    --cc=chenxiaosong@chenxiaosong.com \
    --cc=christian@brauner.io \
    --cc=dhowells@redhat.com \
    --cc=ericvh@kernel.org \
    --cc=hch@infradead.org \
    --cc=idryomov@gmail.com \
    --cc=leon@kernel.org \
    --cc=linux-afs@lists.infradead.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=marc.dionne@auristor.com \
    --cc=netfs@lists.linux.dev \
    --cc=pc@manguebit.org \
    --cc=sfrench@samba.org \
    --cc=trondmy@kernel.org \
    --cc=v9fs@lists.linux.dev \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox