On Thu, Apr 7, 2016 at 1:44 PM, Ming Lei <[email protected]> wrote:
> On Thu, 7 Apr 2016 11:54:49 +0800
> Ming Lei <[email protected]> wrote:
>
> @@ -1737,6 +1739,46 @@ static inline bool bio_remaining_done(struct bio *bio)
> return false;
> }
>
> +/* disable local irq when manipulating the percpu bio_list */
> +static void unwind_bio_endio(struct bio *bio)
> +{
> + struct bio_list bl_in_stack;
> + struct bio_list *bl;
> + unsigned long flags;
> + bool clear_list = false;
> +
> + local_irq_save(flags);
> +
> + bl = this_cpu_read(bio_end_list);
> + if (!bl) {
> + bl = &bl_in_stack;
> + bio_list_init(bl);
> + clear_list = true;
oops, forget to write the pointer into the percpu bio_list pointer.
But it is still working after I fix that by the following line:
this_cpu_write(bio_end_list, bl);
thanks,
--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel