• Curt Wohlgemuth's avatar
    ext4: don't release page refs in ext4_end_bio() · b43d17f3
    Curt Wohlgemuth authored
    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: default avatarCurt Wohlgemuth <curtw@google.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    b43d17f3
page-io.c 11.3 KB