Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce695c65 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Dave Chinner
Browse files

xfs: handle duplicate entries in xfs_mru_cache_insert



The radix tree code can detect and reject duplicate keys at insert
time.  Make xfs_mru_cache_insert handle this case so that future
changes to the filestream allocator can take advantage of this.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent c977eb10
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -443,6 +443,7 @@ xfs_mru_cache_insert(
	void		*value)
{
	xfs_mru_cache_elem_t *elem;
	int error;

	ASSERT(mru && mru->lists);
	if (!mru || !mru->lists)
@@ -453,8 +454,8 @@ xfs_mru_cache_insert(
		return ENOMEM;

	if (radix_tree_preload(GFP_KERNEL)) {
		kmem_zone_free(xfs_mru_elem_zone, elem);
		return ENOMEM;
		error = ENOMEM;
		goto out_free_item;
	}

	INIT_LIST_HEAD(&elem->list_node);
@@ -463,13 +464,20 @@ xfs_mru_cache_insert(

	spin_lock(&mru->lock);

	radix_tree_insert(&mru->store, key, elem);
	error = -radix_tree_insert(&mru->store, key, elem);
	radix_tree_preload_end();
	if (error) {
		spin_unlock(&mru->lock);
		goto out_free_item;
	}
	_xfs_mru_cache_list_insert(mru, elem);

	spin_unlock(&mru->lock);

	return 0;
out_free_item:
	kmem_zone_free(xfs_mru_elem_zone, elem);
	return error;
}

/*