In order to support any particular type of filesystem, a filesystem-specific
module is operational in the filesystem layer in the kernel.
This module knows how to mount a filesystem of that type,
how to open and access a file in a filesystem of that type, etc.
For accesses on the actual filesystem storage, read and write requests
are issued from this filesystem-specific module to the actual block driver below.
Note that a UNIX block driver has no knowledge of files whatsoever; it just
transports blocks from and to the storage medium as commanded
by "the higher kernel powers" (i.e. the file-system specific modules).
When a filesystem-specific module in the filesystem layer is designed
to access filesystems in a read-only fashion, it will never issue a
write request to the block driver below, even if that block driver offers
an interface to do so.
Thus even with the cowloop driver, it is not possible to write to e.g.
a squashfs or iso9660 filesystem.
A possible workaround is to store one large
file containing another (writeable) filesystem type in that read-only
filesystem. When the read-only filesystem is mounted the ordinary way, the file containing
the writable filesystem becomes accessible. That file can then be activated as cowdevice
via the cowloop driver, and be mounted as a read-write filesystem
(similar to example 2).