Messages in this thread | | | Date | Thu, 10 Apr 2008 17:28:46 +0200 | From | Jan Kara <> | Subject | Re: file offset corruption on 32-bit machines? |
| |
> Martin Mares wrote: > > > [*] file_pos_{read,write} (fs/read_write.c) are not called under > > > lock (in sys_read, sys_write, ...), so even if f_pos is written > > > atomically, you will be able to get races when accessing shared > > > descriptor from different threads. > > > > There are however cases when such behavior is perfectly valid: For example > > you can have a file of records of a fixed size, whose order does not matter. > > Then multiple processes can produce the records in parallel, sharing > > a single fd. > > A rather more common thing: > > Does this problem apply when appending lines or records to a log file, > with or without O_APPEND? O_APPEND works correctly in all cases (it ignores f_pos in the descriptor). Without O_APPEND you can hit the race (but I'd like to see a sensible use case of this ;).
> Also, can this problem affect programs doing concurrent reads/writes > using pread/pwrite (or the AIO equivalents)? As Matthew said, pread/pwrite are safe, parallel read can hit the race, write was described above...
Honza -- Jan Kara <jack@suse.cz> SuSE CR Labs
| |