On Fri, Oct 25 2013 at 12:37pm -0400, Alasdair G Kergon <agk@xxxxxxxxxx> wrote: > On Thu, Oct 24, 2013 at 02:30:19PM -0400, Mike Snitzer wrote: > > From: Heinz Mauelshagen <heinzm@xxxxxxxxxx> > > Addresses callers' (insert_in*cache()) requirement that alloc_entry() > > return NULL when an entry isn't able to be allocated. > > What is the code path that leads to the requirement for this patch? > > > +++ b/drivers/md/dm-cache-policy-mq.c > > static struct entry *alloc_entry(struct mq_policy *mq) > > > + struct entry *e = NULL; > > > > if (mq->nr_entries_allocated >= mq->nr_entries) { > > BUG_ON(!list_empty(&mq->free)); > > return NULL; > > } > > > > - e = list_entry(list_pop(&mq->free), struct entry, list); > > - INIT_LIST_HEAD(&e->list); > > - INIT_HLIST_NODE(&e->hlist); > > + if (!list_empty(&mq->free)) { > > + e = list_entry(list_pop(&mq->free), struct entry, list); > > + INIT_LIST_HEAD(&e->list); > > + INIT_HLIST_NODE(&e->hlist); > > + mq->nr_entries_allocated++; > > + } > > In other words, under what circumstances is mq->nr_entries_allocated > less then mq->nr_entries, yet the mq->free list is empty? > > Is it better to apply a patch like this, or rather to fix whatever situation > leads to those circumstances? Has the bug/race always been there or is it a > regression? Fair questions, Heinz should explain further. IIRC this change was needed as a prereq for the conversion of his out-of-tree "background" policy to a shim (layered ontop of mq). So will drop for now, can revisit if/when the need is clearer (e.g. when background policy goes upstream). TBD if we need it in the near-term, but will table this for now. Dropping patch until more context from Heinz is provided. -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel