diff -drupN a/include/linux/reservation.h b/include/linux/reservation.h --- a/include/linux/reservation.h 2018-08-06 17:23:04.000000000 +0300 +++ b/include/linux/reservation.h 2022-06-12 05:28:14.000000000 +0300 @@ -177,17 +177,14 @@ static inline struct fence * reservation_object_get_excl_rcu(struct reservation_object *obj) { struct fence *fence; - unsigned seq; -retry: - seq = read_seqcount_begin(&obj->seq); + + if (!rcu_access_pointer(obj->fence_excl)) + return NULL; + rcu_read_lock(); - fence = rcu_dereference(obj->fence_excl); - if (read_seqcount_retry(&obj->seq, seq)) { - rcu_read_unlock(); - goto retry; - } - fence = fence_get(fence); + fence = fence_get_rcu_safe(&obj->fence_excl); rcu_read_unlock(); + return fence; }