• Josef Bacik's avatar
    Btrfs: fix regression in re-setting a large xattr · ed3ee9f4
    Josef Bacik authored
    Recently I changed the xattr stuff to unconditionally set the xattr first in
    case the xattr didn't exist yet.  This has introduced a regression when setting
    an xattr that already exists with a large value.  If we find the key we are
    looking for split_leaf will assume that we're extending that item.  The problem
    is the size we pass down to btrfs_search_slot includes the size of the item
    already, so if we have the largest xattr we can possibly have plus the size of
    the xattr item plus the xattr item that btrfs_search_slot we'd overflow the
    leaf.  Thankfully this is not what we're doing, but split_leaf doesn't know this
    so it just returns EOVERFLOW.  So in the xattr code we need to check and see if
    we got back EOVERFLOW and treat it like EEXIST since that's really what
    happened.  Thanks,
    Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
    ed3ee9f4
xattr.c 10.6 KB