Details
-
Bug
-
Resolution: Fixed
-
Blocker
-
Lustre 2.10.0, Lustre 2.11.0
-
None
-
2
-
9223372036854775807
Description
Consider the following scenarios:
1) The Thread1 calls osd_attr_set() to set flags on the object. The osd_attr_set() will call the osd_xattr_get() with holding the read mode semaphore on the object::oo_guard.
2) The Thread2 calls osd_declare_destroy() to destroy the object, it will down_write() on the object::oo_gurad, but be blocked by the Thread1's granted read mode semaphore.
3) The osd_xattr_get() triggered by the osd_xattr_set() will also down_read() on the object::oo_guard. But it will be blocked by the Thread2's pending down_write() request.
Then the Thread1 and the Thread2 deadlock.