summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch')
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch
new file mode 100644
index 00000000..1bcc2726
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch
@@ -0,0 +1,64 @@
1From 6feb42647758cf08e5707c9f6a2f0d78d6fb3cc8 Mon Sep 17 00:00:00 2001
2From: Peng Tao <bergwolf@gmail.com>
3Date: Thu, 12 Jan 2012 23:18:41 +0800
4Subject: [PATCH 077/130] pnfsblock: acquire im_lock in _preload_range
5
6commit 39e567ae36fe03c2b446e1b83ee3d39bea08f90b upstream.
7
8When calling _add_entry, we should take the im_lock to protect
9agains other modifiers.
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/extents.c | 11 ++++++-----
17 1 files changed, 6 insertions(+), 5 deletions(-)
18
19diff --git a/fs/nfs/blocklayout/extents.c b/fs/nfs/blocklayout/extents.c
20index 19fa7b0..c69682a 100644
21--- a/fs/nfs/blocklayout/extents.c
22+++ b/fs/nfs/blocklayout/extents.c
23@@ -139,11 +139,13 @@ static int _set_range(struct my_tree *tree, int32_t tag, u64 s, u64 length)
24 }
25
26 /* Ensure that future operations on given range of tree will not malloc */
27-static int _preload_range(struct my_tree *tree, u64 offset, u64 length)
28+static int _preload_range(struct pnfs_inval_markings *marks,
29+ u64 offset, u64 length)
30 {
31 u64 start, end, s;
32 int count, i, used = 0, status = -ENOMEM;
33 struct pnfs_inval_tracking **storage;
34+ struct my_tree *tree = &marks->im_tree;
35
36 dprintk("%s(%llu, %llu) enter\n", __func__, offset, length);
37 start = normalize(offset, tree->mtt_step_size);
38@@ -161,12 +163,11 @@ static int _preload_range(struct my_tree *tree, u64 offset, u64 length)
39 goto out_cleanup;
40 }
41
42- /* Now need lock - HOW??? */
43-
44+ spin_lock(&marks->im_lock);
45 for (s = start; s < end; s += tree->mtt_step_size)
46 used += _add_entry(tree, s, INTERNAL_EXISTS, storage[used]);
47+ spin_unlock(&marks->im_lock);
48
49- /* Unlock - HOW??? */
50 status = 0;
51
52 out_cleanup:
53@@ -286,7 +287,7 @@ int bl_mark_sectors_init(struct pnfs_inval_markings *marks,
54
55 start = normalize(offset, marks->im_block_size);
56 end = normalize_up(offset + length, marks->im_block_size);
57- if (_preload_range(&marks->im_tree, start, end - start))
58+ if (_preload_range(marks, start, end - start))
59 goto outerr;
60
61 spin_lock(&marks->im_lock);
62--
631.7.7.4
64