]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] Make ITERATE_MDDEV work on non-SMP
authorNeil Brown <neilb@cse.unsw.edu.au>
Thu, 20 Jun 2002 05:23:32 +0000 (22:23 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Thu, 20 Jun 2002 05:23:32 +0000 (22:23 -0700)
For an SMP kernel, spin_lock() et.al. are functions.
For a UP kernel, they are statements that must be terminated
by a ';'.  This is not quite the same thing, and hence spin_lock()
cannot be using inside a parenthesised expession.

This patch changes ITERATE_MDDEV to use gcc's "statement expressions"
instead which has the benefit of making the conditionals
more readable.

drivers/md/md.c

index 6bcf2f99ace23e1ad941aa412fb7ac809979e4cc..871b84e2088a0e17d12044f0c09429e00249835c 100644 (file)
@@ -144,17 +144,17 @@ static spinlock_t all_mddevs_lock = SPIN_LOCK_UNLOCKED;
  */
 #define ITERATE_MDDEV(mddev,tmp)                                       \
                                                                        \
-       for (spin_lock(&all_mddevs_lock),                               \
-                    (tmp = all_mddevs.next),                           \
-                    (mddev = NULL);                                    \
-            (void)(tmp != &all_mddevs &&                               \
-                       mddev_get(list_entry(tmp, mddev_t, all_mddevs))),\
-                    spin_unlock(&all_mddevs_lock),                     \
-                    (mddev ? mddev_put(mddev):(void)NULL),             \
-                    (mddev = list_entry(tmp, mddev_t, all_mddevs)),    \
-                    (tmp != &all_mddevs);                              \
-            spin_lock(&all_mddevs_lock),                               \
-                    (tmp = tmp->next)                                  \
+       for (({ spin_lock(&all_mddevs_lock);                            \
+               tmp = all_mddevs.next;                                  \
+               mddev = NULL;});                                        \
+            ({ if (tmp != &all_mddevs)                                 \
+                       mddev_get(list_entry(tmp, mddev_t, all_mddevs));\
+               spin_unlock(&all_mddevs_lock);                          \
+               if (mddev) mddev_put(mddev);                            \
+               mddev = list_entry(tmp, mddev_t, all_mddevs);           \
+               tmp != &all_mddevs;});                                  \
+            ({ spin_lock(&all_mddevs_lock);                            \
+               tmp = tmp->next;})                                      \
                )
 
 static mddev_t *mddev_map[MAX_MD_DEVS];