• Xiaowei.Hu's avatar
    ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2 · 0393afea
    Xiaowei.Hu authored
    With indexed_dir enabled, ocfs2 maintains a list of dirblocks having
    space.
    
    The credit calculation in ocfs2_link_credits() did not correctly account
    for adding an entry that exactly fills a dirblock that triggers removing
    that dirblock by changing the pointer in the previous block in the list.
    The credit calculation did not account for that previous block.
    
    To expose, do:
    
    mkfs.ocfs2 -b 512 -M local /dev/sdX
    mount /dev/sdX /ocfs2
    mkdir /ocfs2/linkdir
    touch /ocfs2/linkdir/file1
    for i in `seq 1 29` ; do link /ocfs2/linkdir/file1
    /ocfs2/linkdir/linklinklinklinklinklink$i; done
    rm -f /ocfs2/linkdir/linklinklinklinklinklink10
    sleep 8
    link /ocfs2/linkdir/file1
    /ocfs2/linkdir/linklinklinklinklinklinkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    
    Note:
    The link names have been crafted for a 512 byte blocksize. Reproducing
    with a larger blocksize will require longer (or more) links. The sleep
    is important. We want jbd2 to commit the transaction so that the missing
    block does not piggy back on account of the previous transaction.
    
    Signed-off-by: XiaoweiHu <xiaowei.hu at oracle.com>
    Reviewed-by: WengangWang <wen.gang.wang at oracle.com>
    Reviewed-by: Sunil.Mushran <sunil.mushran at oracle.com>
    Signed-off-by: default avatarJoel Becker <jlbec@evilplan.org>
    0393afea
journal.h 22 KB