[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 03/10] xen/blkfront: pseudo support for multi hardware queues/rings
> +static void blkif_free(struct blkfront_info *info, int suspend) > +{ > + struct grant *persistent_gnt, *n; > + unsigned int i; > + > + /* Prevent new requests being issued until we fix things up. */ > + spin_lock_irq(&info->io_lock); > + info->connected = suspend ? > + BLKIF_STATE_SUSPENDED : BLKIF_STATE_DISCONNECTED; > + /* No more blkif_request(). */ > + if (info->rq) > + blk_mq_stop_hw_queues(info->rq); > + > + /* Remove all persistent grants */ > + if (!list_empty(&info->grants)) { > + list_for_each_entry_safe(persistent_gnt, n, > + &info->grants, node) { > + list_del(&persistent_gnt->node); > + if (persistent_gnt->gref != GRANT_INVALID_REF) { > + gnttab_end_foreign_access(persistent_gnt->gref, > + 0, 0UL); > + info->persistent_gnts_c--; > + } > + if (info->feature_persistent) > + __free_page(persistent_gnt->page); > + kfree(persistent_gnt); > + } > + } > + BUG_ON(info->persistent_gnts_c != 0); > + > + for (i = 0; i < info->nr_rings; i++) > + blkif_free_ring(&info->rinfo[i]); > + kfree(info->rinfo); ?? That should be inside the loop. Anyhow did this change: diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index d73734f..6b46d4d 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -611,7 +611,7 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri max_grefs += INDIRECT_GREFS(max_grefs); /* - * We have to reserve 'max_grefs' grants at first because persistent + * We have to reserve 'max_grefs' grants because persistent * grants are shared by all rings. */ if (max_grefs > 0) @@ -1212,9 +1212,11 @@ static void blkif_free(struct blkfront_info *info, int suspend) } BUG_ON(info->persistent_gnts_c != 0); - for (i = 0; i < info->nr_rings; i++) + for (i = 0; i < info->nr_rings; i++) { blkif_free_ring(&info->rinfo[i]); - kfree(info->rinfo); + kfree(info->rinfo); + info->ring = NULL; + } info->nr_rings = 0; spin_unlock_irq(&info->io_lock); } and put in my 'for-jens-4.5' branch. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |