[lkml]   [2011]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH 2/2] block: fix accounting bug on cross partition merges
    On 01/04/2011 10:00 PM, Greg KH wrote:
    > 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:

    The object is actually removed in a rcu callback function. We could
    certainly add a flag to hd_struct, set by the release function, to
    indicate disk_map_sector_rcu() that the partition is being removed, but
    why not use the refcount instead?


    >> + if (!kref_test_and_get(&part->ref)) {
    > At all.
    > thanks,
    > greg k-h

     \ /
      Last update: 2011-01-05 14:53    [W:0.022 / U:51.740 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site