summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch')
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch
new file mode 100644
index 00000000..99b0428e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch
@@ -0,0 +1,46 @@
1From b6fd682adf525b6766b8e16b39e39412153d19da Mon Sep 17 00:00:00 2001
2From: Peng Tao <bergwolf@gmail.com>
3Date: Thu, 12 Jan 2012 23:18:47 +0800
4Subject: [PATCH 078/130] pnfsblock: don't spinlock when freeing block_dev
5
6commit 93a3844ee0f843b05a1df4b52e1a19ff26b98d24 upstream.
7
8bl_free_block_dev() may sleep. We can not call it with spinlock held.
9Besides, there is no need to take bm_lock as we are last user freeing bm_devlist.
10
11Signed-off-by: Peng Tao <peng_tao@emc.com>
12Signed-off-by: Benny Halevy <bhalevy@tonian.com>
13Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
14Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
15---
16 fs/nfs/blocklayout/blocklayout.c | 11 ++++-------
17 1 files changed, 4 insertions(+), 7 deletions(-)
18
19diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
20index 281ae95..ce8129d 100644
21--- a/fs/nfs/blocklayout/blocklayout.c
22+++ b/fs/nfs/blocklayout/blocklayout.c
23@@ -779,16 +779,13 @@ bl_cleanup_layoutcommit(struct nfs4_layoutcommit_data *lcdata)
24 static void free_blk_mountid(struct block_mount_id *mid)
25 {
26 if (mid) {
27- struct pnfs_block_dev *dev;
28- spin_lock(&mid->bm_lock);
29- while (!list_empty(&mid->bm_devlist)) {
30- dev = list_first_entry(&mid->bm_devlist,
31- struct pnfs_block_dev,
32- bm_node);
33+ struct pnfs_block_dev *dev, *tmp;
34+
35+ /* No need to take bm_lock as we are last user freeing bm_devlist */
36+ list_for_each_entry_safe(dev, tmp, &mid->bm_devlist, bm_node) {
37 list_del(&dev->bm_node);
38 bl_free_block_dev(dev);
39 }
40- spin_unlock(&mid->bm_lock);
41 kfree(mid);
42 }
43 }
44--
451.7.7.4
46