Re: [PATCH v5 3/8] nbd: reset write cache on disconnect

"yu kuai" <[email protected]> Sun, 2 Aug 2026 19:51:25 +0800
Newsgroups org.kernel.vger.linux-block
Message-ID <[email protected]>
Hi,

=E5=9C=A8 2026/7/30 16:20, Yang Erkun =E5=86=99=E9=81=93:
> An inactive nbd device may refuse any I/O operations. The nbd_config_put
> function calls invalidate_disk, which sets the device capacity to zero
> to reject all read and write I/O. For zero-sector flush I/O requests
> from blkdev_issue_flush, if the write cache is disabled, the zero-sector
> flush I/O immediately returns 0 in submit_bio_noacct. However, since
> nbd_config_put does not clear the write cache state, an inactive nbd
> device might still have the write cache enabled. In this situation,
> zero-sector flush I/O will return -EIO because there is no active socket.
> Although this does not cause any bugs, resetting the write cache state
> would make the behavior consistent.

I don't think this make sense, at this point nbd->config_refs is 0, which m=
eans
there is no opener for the device, so how can there still be outstanding re=
ad/write
or flush IO?

>
> Signed-off-by: Yang Erkun <[email protected]>
> ---
>   drivers/block/nbd.c | 5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
> index 7ec85f94f742..da4b48ef3c79 100644
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@ -1469,8 +1469,13 @@ static void nbd_config_put(struct nbd_device *nbd)
>   	if (refcount_dec_and_mutex_lock(&nbd->config_refs,
>   					&nbd->config_lock)) {
>   		struct nbd_config *config =3D nbd->config;
> +		struct queue_limits lim;
>   		nbd_dev_dbg_close(nbd);
>   		invalidate_disk(nbd->disk);
> +		/* reset write cache */
> +		lim =3D queue_limits_start_update(nbd->disk->queue);
> +		lim.features &=3D ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA);
> +		queue_limits_commit_update(nbd->disk->queue, &lim);
>   		if (nbd->config->bytesize)
>   			kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE);
>   		if (test_and_clear_bit(NBD_RT_HAS_PID_FILE,

--=20
Thanks,
Kuai