...
>> So, a (partial) fix can be this patch ?
>>
>> --- a/drivers/block/rbd.c
>> +++ b/drivers/block/rbd.c
>> @@ -2123,6 +2123,7 @@ static void rbd_img_obj_callback(struct
>> rbd_obj_request *obj_request)
>> rbd_assert(obj_request_img_data_test(obj_request));
>> img_request = obj_request->img_request;
>>
>> + spin_lock_irq(&img_request->completion_lock);
>> dout("%s: img %p obj %p\n", __func__, img_request, obj_request);
>> rbd_assert(img_request != NULL);
>> rbd_assert(img_request->obj_request_count > 0);
>> @@ -2130,7 +2131,6 @@ static void rbd_img_obj_callback(struct
>> rbd_obj_request *obj_request)
>> rbd_assert(which < img_request->obj_request_count);
>> rbd_assert(which >= img_request->next_completion);
>>
>> - spin_lock_irq(&img_request->completion_lock);
>> if (which != img_request->next_completion)
>> goto out;
>
>
> Yes, roughly. I'd do the following instead. It would be great
> to learn whether it eliminates the one form of assertion failure
> you were seeing.
>
> -Alex
>
Strike that, my last patch was dead wrong. Sorry. Try this:
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -2128,11 +2128,11 @@ static void rbd_img_obj_callback(struct
rbd_assert(img_request->obj_request_count > 0);
rbd_assert(which != BAD_WHICH);
rbd_assert(which < img_request->obj_request_count);
- rbd_assert(which >= img_request->next_completion);
spin_lock_irq(&img_request->completion_lock);
- if (which != img_request->next_completion)
+ if (which > img_request->next_completion)
goto out;
+ rbd_assert(which == img_request->next_completion);
for_each_obj_request_from(img_request, obj_request) {
rbd_assert(more);
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html