lkml.org 
[lkml]   [2008]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: 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


    \
     
     \ /
      Last update: 2008-04-10 17:31    [W:2.439 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site