On Mon, Jun 30, 2008 at 9:55 AM, Jens Axboe <jens.axboe@xxxxxxxxxx> wrote: > 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. > So, do you say that people that write applications need to take care of I/O serialization, and block devices (and the block layer itself) don't need to care about this problem? I thought that standard disks guarantee block atomicity (i.e. they don't count on the layers above them to do that). Erez -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html