• Sage Weil's avatar
    Btrfs: add START_SYNC, WAIT_SYNC ioctls · 46204592
    Sage Weil authored
    START_SYNC will start a sync/commit, but not wait for it to
    complete.  Any modification started after the ioctl returns is
    guaranteed not to be included in the commit.  If a non-NULL
    pointer is passed, the transaction id will be returned to
    userspace.
    
    WAIT_SYNC will wait for any in-progress commit to complete.  If a
    transaction id is specified, the ioctl will block and then
    return (success) when the specified transaction has committed.
    If it has already committed when we call the ioctl, it returns
    immediately.  If the specified transaction doesn't exist, it
    returns EINVAL.
    
    If no transaction id is specified, WAIT_SYNC will wait for the
    currently committing transaction to finish it's commit to disk.
    If there is no currently committing transaction, it returns
    success.
    
    These ioctls are useful for applications which want to impose an
    ordering on when fs modifications reach disk, but do not want to
    wait for the full (slow) commit process to do so.
    
    Picky callers can take the transid returned by START_SYNC and
    feed it to WAIT_SYNC, and be certain to wait only as long as
    necessary for the transaction _they_ started to reach disk.
    
    Sloppy callers can START_SYNC and WAIT_SYNC without a transid,
    and provided they didn't wait too long between the calls, they
    will get the same result.  However, if a second commit starts
    before they call WAIT_SYNC, they may end up waiting longer for
    it to commit as well.  Even so, a START_SYNC+WAIT_SYNC still
    guarantees that any operation completed before the START_SYNC
    reaches disk.
    Signed-off-by: default avatarSage Weil <sage@newdream.net>
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    46204592
transaction.c 36.2 KB