Whamcloud - gitweb
LU-14752 obdclass: handle EBUSY returned for lu_object hashtable 68/43968/4
authorJames Simmons <jsimmons@infradead.org>
Thu, 10 Jun 2021 16:53:57 +0000 (12:53 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 30 Jun 2021 03:16:26 +0000 (03:16 +0000)
When the rhashtable grows to a certain size it will be rescaled.
When rescaling you can be returned a ENOMEM or EBUSY error. This
we reported as:

LustreError: 3594004:0:(lu_object.c:2472:lu_object_assign_fid()) ASSERTION( rc == 0 ) failed: failed hashtable insertion: rc = -16
LustreError: 3594004:0:(lu_object.c:2472:lu_object_assign_fid()) LBUG
Pid: 3594004, comm: mdt01_020 4.18.0-240.22.1.1toss.t4.x86_64 #1 SMP Tue Apr 13 17:18:40 PDT 2021
Call Trace TBD:
Kernel panic - not syncing: LBUG
...
Call Trace:
dump_stack+0x5c/0x80
panic+0xe7/0x2a9
lbug_with_loc.cold.10+0x18/0x18 [libcfs]
lu_object_assign_fid+0x3b8/0x3c0 [obdclass]

Add handling the EBUSY case for our lu_object hash.

Fixes: aff14dbc522 ("LU-8130 lu_object: convert lu_object cache to rhashtable")
Change-Id: Id85f32633117e02850b799e8d95e3e35d982cbd4
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-on: https://review.whamcloud.com/43968
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Gian-Carlo DeFazio <defazio1@llnl.gov>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdclass/lu_object.c

index 21ed4f3..b381cfe 100644 (file)
@@ -2479,7 +2479,7 @@ try_again:
        /* supposed to be unique */
        LASSERT(rc != -EEXIST);
        /* handle hash table resizing */
        /* supposed to be unique */
        LASSERT(rc != -EEXIST);
        /* handle hash table resizing */
-       if (rc == -ENOMEM) {
+       if (rc == -ENOMEM || rc == -EBUSY) {
                msleep(20);
                goto try_again;
        }
                msleep(20);
                goto try_again;
        }