Write is not atomic?

From: Juliusz Chroboczek
Date: Mon Oct 15 2012 - 17:49:54 EST


Hi,

The Linux manual page for write(2) says:

The adjustment of the file offset and the write operation are
performed as an atomic step.

This is apparently an extension to POSIX, which says

This volume of IEEE Std 1003.1-2001 does not specify behavior of
concurrent writes to a file from multiple processes. Applications
should use some form of concurrency control.

The following fragment of code

int fd;
fd = open("exemple", O_CREAT | O_WRONLY | O_TRUNC, 0666);
fork();
write(fd, "Ouille", 6);
close(fd);

produces "OuilleOuille", as expected, on ext4 on two machines running
Linux 3.2 AMD64. However, over XFS on an old Pentium III at 500 MHz
running 2.6.32, it produces just "Ouille" roughly once in three times.

Sorry for not being able to give more test cases, but I cannot easily
change either the filesystem or the kernel on the Pentium server.

-- Juliusz Chroboczek

P.S. I'll appreciate being copied with any replies.
--
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/