[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 2011-01-05 16:58, Greg KH wrote:
    > On Wed, Jan 05, 2011 at 02:55:51PM +0100, Jens Axboe wrote:
    >> On 2011-01-04 22:00, 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:
    >> It doesn't matter if you do it in there of after the fact, since the
    >> "lock" (RCU) is being held across the call. See my original suggestion
    >> here:
    > Ok, that's fine, just do it without adding that kref function and I have
    > no objection :)

    Why? The code is perfectly fine. I originally objected to making an API
    like this for simple reference counting - seems I was right. Please
    actually look at the code and use. Alexey asked whether this was a toy
    API or a real one, I'd like to know that as well. If this is meant just
    for very basic get/put references, fine, then document that. But then
    what's the point of having this API in the first place?

    Jens Axboe

     \ /
      Last update: 2011-01-05 19:49    [W:2.082 / U:0.068 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site