lkml.org 
[lkml]   [2012]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[078/129] pnfsblock: dont spinlock when freeing block_dev
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------
    Content-Length: 1276
    Lines: 40

    From: Peng Tao <bergwolf@gmail.com>

    commit 93a3844ee0f843b05a1df4b52e1a19ff26b98d24 upstream.

    bl_free_block_dev() may sleep. We can not call it with spinlock held.
    Besides, there is no need to take bm_lock as we are last user freeing bm_devlist.

    Signed-off-by: Peng Tao <peng_tao@emc.com>
    Signed-off-by: Benny Halevy <bhalevy@tonian.com>
    Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/nfs/blocklayout/blocklayout.c | 11 ++++-------
    1 file changed, 4 insertions(+), 7 deletions(-)

    --- a/fs/nfs/blocklayout/blocklayout.c
    +++ b/fs/nfs/blocklayout/blocklayout.c
    @@ -779,16 +779,13 @@ bl_cleanup_layoutcommit(struct nfs4_layo
    static void free_blk_mountid(struct block_mount_id *mid)
    {
    if (mid) {
    - struct pnfs_block_dev *dev;
    - spin_lock(&mid->bm_lock);
    - while (!list_empty(&mid->bm_devlist)) {
    - dev = list_first_entry(&mid->bm_devlist,
    - struct pnfs_block_dev,
    - bm_node);
    + struct pnfs_block_dev *dev, *tmp;
    +
    + /* No need to take bm_lock as we are last user freeing bm_devlist */
    + list_for_each_entry_safe(dev, tmp, &mid->bm_devlist, bm_node) {
    list_del(&dev->bm_node);
    bl_free_block_dev(dev);
    }
    - spin_unlock(&mid->bm_lock);
    kfree(mid);
    }
    }



    \
     
     \ /
      Last update: 2012-01-24 04:03    [W:4.083 / U:0.344 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site