diff options
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.patch | 46 |
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 @@ | |||
1 | From b6fd682adf525b6766b8e16b39e39412153d19da Mon Sep 17 00:00:00 2001 | ||
2 | From: Peng Tao <bergwolf@gmail.com> | ||
3 | Date: Thu, 12 Jan 2012 23:18:47 +0800 | ||
4 | Subject: [PATCH 078/130] pnfsblock: don't spinlock when freeing block_dev | ||
5 | |||
6 | commit 93a3844ee0f843b05a1df4b52e1a19ff26b98d24 upstream. | ||
7 | |||
8 | bl_free_block_dev() may sleep. We can not call it with spinlock held. | ||
9 | Besides, there is no need to take bm_lock as we are last user freeing bm_devlist. | ||
10 | |||
11 | Signed-off-by: Peng Tao <peng_tao@emc.com> | ||
12 | Signed-off-by: Benny Halevy <bhalevy@tonian.com> | ||
13 | Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> | ||
14 | Signed-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 | |||
19 | diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c | ||
20 | index 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 | -- | ||
45 | 1.7.7.4 | ||
46 | |||