lkml.org 
[lkml]   [2011]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[120/272] kref: add kref_test_and_get
    2.6.37-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Jerome Marchand <jmarchan@redhat.com>

    commit e4a683c899cd5a49f8d684a054c95bd115a0c005 upstream.

    Add kref_test_and_get() function, which atomically add a reference only if
    refcount is not zero. This prevent to add a reference to an object that is
    already being removed.

    Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
    Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    include/linux/kref.h | 1 +
    lib/kref.c | 12 ++++++++++++
    2 files changed, 13 insertions(+)

    --- a/include/linux/kref.h
    +++ b/include/linux/kref.h
    @@ -23,6 +23,7 @@ struct kref {

    void kref_init(struct kref *kref);
    void kref_get(struct kref *kref);
    +int kref_test_and_get(struct kref *kref);
    int kref_put(struct kref *kref, void (*release) (struct kref *kref));

    #endif /* _KREF_H_ */
    --- a/lib/kref.c
    +++ b/lib/kref.c
    @@ -37,6 +37,18 @@ void kref_get(struct kref *kref)
    }

    /**
    + * kref_test_and_get - increment refcount for object only if refcount is not
    + * zero.
    + * @kref: object.
    + *
    + * Return non-zero if the refcount was incremented, 0 otherwise
    + */
    +int kref_test_and_get(struct kref *kref)
    +{
    + return atomic_inc_not_zero(&kref->refcount);
    +}
    +
    +/**
    * kref_put - decrement refcount for object.
    * @kref: object.
    * @release: pointer to the function that will clean up the object when the



    \
     
     \ /
      Last update: 2011-02-16 02:33    [W:0.018 / U:127.924 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site