Re: Should a block device enforce block atomicity?

From: Jens Axboe
Date: Mon Jun 30 2008 - 02:55:40 EST


On Mon, Jun 30 2008, Erez Zilber wrote:
> Hi,
>
> I have a question about block devices and whether they are required to
> enforce block atomicity:
>
> I read the code of drivers/block/brd.c, and I didn't see any locking
> when blocks are read/written. I also looked at the block layer code
> that calls brd and didn't find any locking there. Does it mean that
> there's no block atomicity (i.e. multiple threads can write a single
> block at the same time)? Is there any hidden assumption here? Is this
> the responsibility of the application to do that (e.g. not start a
> WRITE request before other READ/WRITE requests to the same block were
> completed)?

The block layer doesn't give such guarentees, not for "regular" block
devices either. If the IO goes through the page cache then that will
serialize IO to a given page, but with eg O_DIRECT IO, you could have
the same block in flight several times. So if you are doing raw IO, the
application has to ensure ordering of the same block.

--
Jens Axboe

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/