Messages in this thread |  | | | Date | Fri, 24 Dec 2010 14:29:16 -0500 | | From | Vivek Goyal <> | | Subject | Re: [PATCH] block: fix accounting bug on cross partition merges |
| |
On Thu, Dec 23, 2010 at 06:04:11PM +0100, Jerome Marchand wrote: > On 12/23/2010 04:39 PM, Vivek Goyal wrote: > >> diff --git a/block/blk-core.c b/block/blk-core.c > >> index 4ce953f..72d12d2 100644 > >> --- a/block/blk-core.c > >> +++ b/block/blk-core.c > >> @@ -64,13 +64,21 @@ static void drive_stat_acct(struct request *rq, int new_io) > >> return; > >> > >> cpu = part_stat_lock(); > >> - part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq)); > >> > >> - if (!new_io) > >> + if (!new_io) { > >> + part = rq->part; > >> part_stat_inc(cpu, part, merges[rw]); > >> - else { > >> + } else { > >> + part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq)); > >> + if(part->partno && !kref_test_and_get(&part->ref)) > >> + /* > > > > Do we have to check this part->partno both while taking and releasing > > reference. Can't we take one extra reference for disk->part0, at > > alloc_disk_node() time so that it is never freed and only freed when > > disk is going away and gendisk is being freed. > > > > That way, you don't have to differentiate between disk->part0 and rest > > of the partitions while taking or dropping references. > > We could do it in any way, as long as we don't end up trying to free > disk->part0. I choose not to touch part0->ref at all, but we could also > drop all the part->partno test, and get a reference on part0 when we use > it as a backup. I have no strong opinion about a way or an other.
Ok, I personally like taking an extra reference to disk->part0 and put a proper comment there so that at rest of the places we don't try to differentiate between part0 and other partitions. Having said that I am not too concerned about it. It is just one of the minor details. So post the new version of patch after testing.
Thanks Vivek
|  |