• L
    Btrfs: MOD_LOG_KEY_REMOVE_WHILE_MOVING never change node's nritems · 95c80bb1
    Liu Bo 提交于
    Key MOD_LOG_KEY_REMOVE_WHILE_MOVING means that we're doing memmove inside
    an extent buffer node, and the node's number of items remains unchanged
    (unless we are inserting a single pointer, but we have MOD_LOG_KEY_ADD for that).
    
    So we don't need to increase node's number of items during rewinding,
    otherwise we may get an node larger than leafsize and cause general protection
    errors later.
    
    Here is the details,
    - If we do memory move for inserting a single pointer, we need to
      add node's nritems by one, and we honor MOD_LOG_KEY_ADD for adding.
    
    - If we do memory move for deleting a single pointer, we need to
      decrease node's nritems by one, and we honor MOD_LOG_KEY_REMOVE for
      deleting.
    
    - If we do memory move for balance left/right, we need to decrease
      node's nritems, and we honor MOD_LOG_KEY_REMOVE for balaning.
    Signed-off-by: NLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: NChris Mason <chris.mason@fusionio.com>
    95c80bb1
ctree.c 147.0 KB