• B
    fs: export __block_write_full_page · b4bba389
    Benjamin Marzinski 提交于
    gfs2 needs to be able to skip the check to see if a page is outside of
    the file size when writing it out. gfs2 can get into a situation where
    it needs to flush its in-memory log to disk while a truncate is in
    progress. If the file being trucated has data journaling enabled, it is
    possible that there are data blocks in the log that are past the end of
    the file. gfs can't finish the log flush without either writing these
    blocks out or revoking them. Otherwise, if the node crashed, it could
    overwrite subsequent changes made by other nodes in the cluster when
    it's journal was replayed.
    
    Unfortunately, there is no way to add log entries to the log during a
    flush. So gfs2 simply writes out the page instead. This situation can
    only occur when the truncate code still has the file locked exclusively,
    and hasn't marked this block as free in the metadata (which happens
    later in truc_dealloc).  After gfs2 writes this page out, the truncation
    code will shortly invalidate it and write out any revokes if necessary.
    
    In order to make this work, gfs2 needs to be able to skip the check for
    writes outside the file size. Since the check exists in
    block_write_full_page, this patch exports __block_write_full_page, which
    doesn't have the check.
    Signed-off-by: NBenjamin Marzinski <bmarzins@redhat.com>
    Signed-off-by: NBob Peterson <rpeterso@redhat.com>
    b4bba389
buffer.c 88.3 KB