diff --git a/mm/slub.c b/mm/slub.c
index 4bc29bcd0d5dc46e0fa782c1668e0c18b91d3b72..f9b39a3718d009612d6935bf5dbc1e7bbcecaf3e 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5560,7 +5560,10 @@ static ssize_t slab_attr_store(struct kobject *kobj,
 	if (slab_state >= FULL && err >= 0 && is_root_cache(s)) {
 		struct kmem_cache *c;
 
-		mutex_lock(&slab_mutex);
+		if (!mutex_trylock(&slab_mutex)) {
+			pr_warn("slab file is busy\n");
+			return -EBUSY;
+		}
 		if (s->max_attr_size < len)
 			s->max_attr_size = len;