Root/target/linux/generic/patches-3.7/502-yaffs-Switch-from-semaphores-to-mutexes.patch

1From c0c289363e84c53b5872f7c0c5069045096dca07 Mon Sep 17 00:00:00 2001
2From: Charles Manning <cdhmanning@gmail.com>
3Date: Wed, 3 Nov 2010 16:01:12 +1300
4Subject: [PATCH] yaffs: Switch from semaphores to mutexes
5
6commit 73c54aa8c1de3f61a4c211cd47431293a6092f18 upstream.
7
8Mutex is faster and init_MUTEX has been deprecated, so we'll just switch
9to mutexes.
10
11Signed-off-by: Charles Manning <cdhmanning@gmail.com>
12---
13 yaffs_linux.h | 2 +-
14 yaffs_vfs.c | 24 ++++++++++++------------
15 yaffs_vfs_multi.c | 26 +++++++++++++-------------
16 3 files changed, 26 insertions(+), 26 deletions(-)
17
18--- a/fs/yaffs2/yaffs_linux.h
19+++ b/fs/yaffs2/yaffs_linux.h
20@@ -25,7 +25,7 @@ struct yaffs_LinuxContext {
21     struct super_block * superBlock;
22     struct task_struct *bgThread; /* Background thread for this device */
23     int bgRunning;
24- struct semaphore grossLock; /* Gross locking semaphore */
25+ struct mutex grossLock; /* Gross locking mutex*/
26     __u8 *spareBuffer; /* For mtdif2 use. Don't know the size of the buffer
27                  * at compile time so we have to allocate it.
28                  */
29--- a/fs/yaffs2/yaffs_vfs_glue.c
30+++ b/fs/yaffs2/yaffs_vfs_glue.c
31@@ -515,14 +515,14 @@ static unsigned yaffs_gc_control_callbac
32 static void yaffs_gross_lock(yaffs_dev_t *dev)
33 {
34     T(YAFFS_TRACE_LOCK, (TSTR("yaffs locking %p\n"), current));
35- down(&(yaffs_dev_to_lc(dev)->grossLock));
36+ mutex_lock(&(yaffs_dev_to_lc(dev)->grossLock));
37     T(YAFFS_TRACE_LOCK, (TSTR("yaffs locked %p\n"), current));
38 }
39 
40 static void yaffs_gross_unlock(yaffs_dev_t *dev)
41 {
42     T(YAFFS_TRACE_LOCK, (TSTR("yaffs unlocking %p\n"), current));
43- up(&(yaffs_dev_to_lc(dev)->grossLock));
44+ mutex_unlock(&(yaffs_dev_to_lc(dev)->grossLock));
45 }
46 
47 #ifdef YAFFS_COMPILE_EXPORTFS
48@@ -2542,7 +2542,7 @@ static void yaffs_read_inode(struct inod
49 #endif
50 
51 static YLIST_HEAD(yaffs_context_list);
52-struct semaphore yaffs_context_lock;
53+struct mutex yaffs_context_lock;
54 
55 static void yaffs_put_super(struct super_block *sb)
56 {
57@@ -2568,9 +2568,9 @@ static void yaffs_put_super(struct super
58 
59     yaffs_gross_unlock(dev);
60 
61- down(&yaffs_context_lock);
62+ mutex_lock(&yaffs_context_lock);
63     ylist_del_init(&(yaffs_dev_to_lc(dev)->contextList));
64- up(&yaffs_context_lock);
65+ mutex_unlock(&yaffs_context_lock);
66 
67     if (yaffs_dev_to_lc(dev)->spareBuffer) {
68         YFREE(yaffs_dev_to_lc(dev)->spareBuffer);
69@@ -3016,7 +3016,7 @@ static struct super_block *yaffs_interna
70     param->skip_checkpt_rd = options.skip_checkpoint_read;
71     param->skip_checkpt_wr = options.skip_checkpoint_write;
72 
73- down(&yaffs_context_lock);
74+ mutex_lock(&yaffs_context_lock);
75     /* Get a mount id */
76     found = 0;
77     for(mount_id=0; ! found; mount_id++){
78@@ -3030,13 +3030,13 @@ static struct super_block *yaffs_interna
79     context->mount_id = mount_id;
80 
81     ylist_add_tail(&(yaffs_dev_to_lc(dev)->contextList), &yaffs_context_list);
82- up(&yaffs_context_lock);
83+ mutex_unlock(&yaffs_context_lock);
84 
85         /* Directory search handling...*/
86         YINIT_LIST_HEAD(&(yaffs_dev_to_lc(dev)->searchContexts));
87         param->remove_obj_fn = yaffs_remove_obj_callback;
88 
89- init_MUTEX(&(yaffs_dev_to_lc(dev)->grossLock));
90+ mutex_init(&(yaffs_dev_to_lc(dev)->grossLock));
91 
92     yaffs_gross_lock(dev);
93 
94@@ -3268,7 +3268,7 @@ static int yaffs_proc_read(char *page,
95     else {
96         step-=2;
97         
98- down(&yaffs_context_lock);
99+ mutex_lock(&yaffs_context_lock);
100 
101         /* Locate and print the Nth entry. Order N-squared but N is small. */
102         ylist_for_each(item, &yaffs_context_list) {
103@@ -3287,7 +3287,7 @@ static int yaffs_proc_read(char *page,
104             
105             break;
106         }
107- up(&yaffs_context_lock);
108+ mutex_unlock(&yaffs_context_lock);
109     }
110 
111     return buf - page < count ? buf - page : count;
112@@ -3301,7 +3301,7 @@ static int yaffs_stats_proc_read(char *p
113     char *buf = page;
114     int n = 0;
115 
116- down(&yaffs_context_lock);
117+ mutex_lock(&yaffs_context_lock);
118 
119     /* Locate and print the Nth entry. Order N-squared but N is small. */
120     ylist_for_each(item, &yaffs_context_list) {
121@@ -3317,7 +3317,7 @@ static int yaffs_stats_proc_read(char *p
122                 dev->bg_gcs, dev->oldest_dirty_gc_count,
123                 dev->n_obj, dev->n_tnodes);
124     }
125- up(&yaffs_context_lock);
126+ mutex_unlock(&yaffs_context_lock);
127 
128 
129     return buf - page < count ? buf - page : count;
130@@ -3494,7 +3494,7 @@ static int __init init_yaffs_fs(void)
131 
132 
133 
134- init_MUTEX(&yaffs_context_lock);
135+ mutex_init(&yaffs_context_lock);
136 
137     /* Install the proc_fs entries */
138     my_proc_entry = create_proc_entry("yaffs",
139

Archive Download this file



interactive