• C
    ext4: don't release page refs in ext4_end_bio() · b43d17f3
    Curt Wohlgemuth 提交于
    We can clear PageWriteback on each page when the IO
    completes, but we can't release the references on the page
    until we convert any uninitialized extents.
    
    Without this patch, the use of the dioread_nolock mount
    option can break buffered writes, because extents may
    not be converted by the time a subsequent buffered read
    comes in; if the page is not in the page cache, a read
    will return zeros if the extent is still uninitialized.
    
    I tested this with a (temporary) patch that adds a call
    to msleep(1000) at the start of ext4_end_io_work(), to delay
    processing of each DIO-unwritten work queue item.  With this
    msleep(), a simple workload of
    
      fallocate
      write
      fadvise
      read
    
    will fail without this patch, succeeds with it.
    Signed-off-by: NCurt Wohlgemuth <curtw@google.com>
    Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
    b43d17f3
page-io.c 11.3 KB