On Mon, 4 Feb 2013 09:06:24 -0800 Tejun Heo <t...@kernel.org> wrote: > Hello, Chas. > > On Mon, Feb 04, 2013 at 09:04:10AM -0500, chas williams - CONTRACTOR wrote: > > I don't quite understand your comment. idr_pre_get() returns 0 in the > > case of failure. > > So, if you do the following, > > int id1 = 0, id2 = 0; > > if (!id1) > err = idr_get_new_above(&card->idr, handle1, 0, &id1); > if (!id2 && err == 0) > err = idr_get_new_above(&card->idr, handle2, 0, &id2); > if (err) > goto out; > > You have no way of telling whether id1/2 are allocated or not. 0 is > the special "not allocated" value but it also is a valid ID. The > error path should be freeing id1/2 if either of them has been > allocated but it doesn't and can't with 0 as the non-allocated value.
yeah, i see now. it didn't understand what idr_get_new_above() was doing with the start id. i assumed that it would return something greater than the start id. i guess it never did return the starting id (atleast after some initial failure). additionally, yes, cleaning up if the second allocation failed was never done. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/