Re: [PATCH 2/2] block: fix accounting bug on cross partition merges

From: Greg KH
Date: Tue Jan 04 2011 - 16:00:36 EST


On Tue, Jan 04, 2011 at 04:55:13PM +0100, Jerome Marchand wrote:
> Also add a refcount to struct hd_struct to keep the partition in
> memory as long as users exist. We use kref_test_and_get() to ensure
> we don't add a reference to a partition which is going away.

No, don't do this, use a kref correctly and no such function should be
needed.

> + } else {
> + part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq));

That is the function that should properly increment the reference count
on the object. If the object is "being removed", then it will return
NULL and you need to check that. Do that and you do not need to add:

> + if (!kref_test_and_get(&part->ref)) {

At all.

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/