• M
    ext4: journal credit fix for the delayed allocation's writepages() function · 525f4ed8
    Mingming Cao 提交于
    Previous delalloc writepages implementation started a new transaction
    outside of a loop which called get_block() to do the block allocation.
    Since we didn't know exactly how many blocks would need to be allocated,
    the estimated journal credits required was very conservative and caused
    many issues.
    
    With the reworked delayed allocation, a new transaction is created for
    each get_block(), thus we don't need to guess how many credits for the
    multiple chunk of allocation.  We start every transaction with enough
    credits for inserting a single exent.  When estimate the credits for
    indirect blocks to allocate a chunk of blocks, we need to know the
    number of data blocks to allocate.  We use the total number of reserved
    delalloc datablocks; if that is too big, for non-extent files, we need
    to limit the number of blocks to EXT4_MAX_TRANS_BLOCKS.
    
    Code cleanup from Aneesh.
    Signed-off-by: NMingming Cao <cmm@us.ibm.com>
    Reviewed-off-by: NAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
    525f4ed8
inode.c 137.9 KB