Applying with these fixes on my side:
- "punches or zeroes it with vfs_fallocate(), which does, and fails
  with EBADF" -> "punches or zeroes it with vfs_fallocate() inside the
  file and preallocates space past its end. Both check FMODE_WRITE and
  fail";
- "Kill write requests" -> "Kill write and discard requests";
- added a paragraph on what users see now: a read-write mount of a
  partition over a read-only ploop device, and a read-only ext4 mount
  that has to replay its journal through it, fail with an I/O error
  instead of changing the image.

On Mon, 9 Nov 2026 20:06:04 +0100, Denis V. Lunev wrote:
> does not check FMODE_WRITE, so it reaches the image. Allocating a cluster
> punches or zeroes it with vfs_fallocate(), which does, and fails with
> EBADF, so part of such a write fails with an I/O error and the rest

A cluster past the end of the file goes to the preallocation, where
do_ftruncate() on the read-only file fails with EINVAL and the write
gets EIO after the retries, not EBADF.

> Kill write requests of a read-only table in ploop_clone_and_map(), as

op_is_write() matches discards too, and both mounts above used to work
by writing into the image. Whoever hits such a failed mount now should
find the reason in this message.

-- 
Konstantin Khorenko,
Virtuozzo Linux Kernel Team

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to