lkml.org 
[lkml]   [2011]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/40] Staging: hv: storvsc: Get rid of final_release_stor_device() by inlining code
    Date
    Get rid of final_release_stor_device() by inlining code.

    Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
    Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
    ---
    drivers/staging/hv/storvsc.c | 25 +++++--------------------
    1 files changed, 5 insertions(+), 20 deletions(-)

    diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
    index f52e610..c4cb170 100644
    --- a/drivers/staging/hv/storvsc.c
    +++ b/drivers/staging/hv/storvsc.c
    @@ -70,25 +70,6 @@ static inline struct storvsc_device *get_in_stor_device(
    return stor_device;
    }

    -/* Drop ref count to 0. No one can use stor_device object. */
    -static inline struct storvsc_device *final_release_stor_device(
    - struct hv_device *device)
    -{
    - struct storvsc_device *stor_device;
    - unsigned long flags;
    -
    - stor_device = (struct storvsc_device *)device->ext;
    -
    - /* Busy wait until the ref drop to 1, then set it to 0 */
    - while (atomic_cmpxchg(&stor_device->ref_count, 1, 0) != 1)
    - udelay(100);
    -
    - spin_lock_irqsave(&device->ext_lock, flags);
    - device->ext = NULL;
    - spin_unlock_irqrestore(&device->ext_lock, flags);
    - return stor_device;
    -}
    -
    static int storvsc_channel_init(struct hv_device *device)
    {
    struct storvsc_device *stor_device;
    @@ -390,6 +371,7 @@ int storvsc_dev_add(struct hv_device *device,
    int storvsc_dev_remove(struct hv_device *device)
    {
    struct storvsc_device *stor_device;
    + unsigned long flags;

    /*
    * Since we currently hold a reference on the stor
    @@ -408,7 +390,10 @@ int storvsc_dev_remove(struct hv_device *device)

    storvsc_wait_to_drain(stor_device);

    - stor_device = final_release_stor_device(device);
    + spin_lock_irqsave(&device->ext_lock, flags);
    + atomic_set(&stor_device->ref_count, 0);
    + device->ext = NULL;
    + spin_unlock_irqrestore(&device->ext_lock, flags);

    /* Close the channel */
    vmbus_close(device->channel);
    --
    1.7.4.1


    \
     
     \ /
      Last update: 2011-06-29 16:27    [W:4.565 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site