diff options
Diffstat (limited to 'drivers/md')
| -rw-r--r-- | drivers/md/dm-ioctl.c | 9 | ||||
| -rw-r--r-- | drivers/md/dm-mpath.c | 16 | ||||
| -rw-r--r-- | drivers/md/raid6.h | 4 | ||||
| -rw-r--r-- | drivers/md/raid6algos.c | 1 | ||||
| -rw-r--r-- | drivers/md/raid6altivec.uc | 18 | ||||
| -rw-r--r-- | drivers/md/raid6test/Makefile | 27 |
6 files changed, 59 insertions, 16 deletions
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index 200a0688f717..54ec737195e0 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c | |||
| @@ -230,11 +230,20 @@ static int dm_hash_insert(const char *name, const char *uuid, struct mapped_devi | |||
| 230 | 230 | ||
| 231 | static void __hash_remove(struct hash_cell *hc) | 231 | static void __hash_remove(struct hash_cell *hc) |
| 232 | { | 232 | { |
| 233 | struct dm_table *table; | ||
| 234 | |||
| 233 | /* remove from the dev hash */ | 235 | /* remove from the dev hash */ |
| 234 | list_del(&hc->uuid_list); | 236 | list_del(&hc->uuid_list); |
| 235 | list_del(&hc->name_list); | 237 | list_del(&hc->name_list); |
| 236 | unregister_with_devfs(hc); | 238 | unregister_with_devfs(hc); |
| 237 | dm_set_mdptr(hc->md, NULL); | 239 | dm_set_mdptr(hc->md, NULL); |
| 240 | |||
| 241 | table = dm_get_table(hc->md); | ||
| 242 | if (table) { | ||
| 243 | dm_table_event(table); | ||
| 244 | dm_table_put(table); | ||
| 245 | } | ||
| 246 | |||
| 238 | dm_put(hc->md); | 247 | dm_put(hc->md); |
| 239 | if (hc->new_map) | 248 | if (hc->new_map) |
| 240 | dm_table_put(hc->new_map); | 249 | dm_table_put(hc->new_map); |
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 785806bdb248..f9b7b32d5d5c 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
| @@ -329,13 +329,17 @@ static int map_io(struct multipath *m, struct bio *bio, struct mpath_io *mpio, | |||
| 329 | /* | 329 | /* |
| 330 | * If we run out of usable paths, should we queue I/O or error it? | 330 | * If we run out of usable paths, should we queue I/O or error it? |
| 331 | */ | 331 | */ |
| 332 | static int queue_if_no_path(struct multipath *m, unsigned queue_if_no_path) | 332 | static int queue_if_no_path(struct multipath *m, unsigned queue_if_no_path, |
| 333 | unsigned save_old_value) | ||
| 333 | { | 334 | { |
| 334 | unsigned long flags; | 335 | unsigned long flags; |
| 335 | 336 | ||
| 336 | spin_lock_irqsave(&m->lock, flags); | 337 | spin_lock_irqsave(&m->lock, flags); |
| 337 | 338 | ||
| 338 | m->saved_queue_if_no_path = m->queue_if_no_path; | 339 | if (save_old_value) |
| 340 | m->saved_queue_if_no_path = m->queue_if_no_path; | ||
| 341 | else | ||
| 342 | m->saved_queue_if_no_path = queue_if_no_path; | ||
| 339 | m->queue_if_no_path = queue_if_no_path; | 343 | m->queue_if_no_path = queue_if_no_path; |
| 340 | if (!m->queue_if_no_path && m->queue_size) | 344 | if (!m->queue_if_no_path && m->queue_size) |
| 341 | queue_work(kmultipathd, &m->process_queued_ios); | 345 | queue_work(kmultipathd, &m->process_queued_ios); |
| @@ -677,7 +681,7 @@ static int parse_features(struct arg_set *as, struct multipath *m, | |||
| 677 | return 0; | 681 | return 0; |
| 678 | 682 | ||
| 679 | if (!strnicmp(shift(as), MESG_STR("queue_if_no_path"))) | 683 | if (!strnicmp(shift(as), MESG_STR("queue_if_no_path"))) |
| 680 | return queue_if_no_path(m, 1); | 684 | return queue_if_no_path(m, 1, 0); |
| 681 | else { | 685 | else { |
| 682 | ti->error = "Unrecognised multipath feature request"; | 686 | ti->error = "Unrecognised multipath feature request"; |
| 683 | return -EINVAL; | 687 | return -EINVAL; |
| @@ -1077,7 +1081,7 @@ static void multipath_presuspend(struct dm_target *ti) | |||
| 1077 | { | 1081 | { |
| 1078 | struct multipath *m = (struct multipath *) ti->private; | 1082 | struct multipath *m = (struct multipath *) ti->private; |
| 1079 | 1083 | ||
| 1080 | queue_if_no_path(m, 0); | 1084 | queue_if_no_path(m, 0, 1); |
| 1081 | } | 1085 | } |
| 1082 | 1086 | ||
| 1083 | /* | 1087 | /* |
| @@ -1222,9 +1226,9 @@ static int multipath_message(struct dm_target *ti, unsigned argc, char **argv) | |||
| 1222 | 1226 | ||
| 1223 | if (argc == 1) { | 1227 | if (argc == 1) { |
| 1224 | if (!strnicmp(argv[0], MESG_STR("queue_if_no_path"))) | 1228 | if (!strnicmp(argv[0], MESG_STR("queue_if_no_path"))) |
| 1225 | return queue_if_no_path(m, 1); | 1229 | return queue_if_no_path(m, 1, 0); |
| 1226 | else if (!strnicmp(argv[0], MESG_STR("fail_if_no_path"))) | 1230 | else if (!strnicmp(argv[0], MESG_STR("fail_if_no_path"))) |
| 1227 | return queue_if_no_path(m, 0); | 1231 | return queue_if_no_path(m, 0, 0); |
| 1228 | } | 1232 | } |
| 1229 | 1233 | ||
| 1230 | if (argc != 2) | 1234 | if (argc != 2) |
diff --git a/drivers/md/raid6.h b/drivers/md/raid6.h index f80ee6350edf..31cbee71365f 100644 --- a/drivers/md/raid6.h +++ b/drivers/md/raid6.h | |||
| @@ -69,9 +69,13 @@ extern const char raid6_empty_zero_page[PAGE_SIZE]; | |||
| 69 | #define __init | 69 | #define __init |
| 70 | #define __exit | 70 | #define __exit |
| 71 | #define __attribute_const__ __attribute__((const)) | 71 | #define __attribute_const__ __attribute__((const)) |
| 72 | #define noinline __attribute__((noinline)) | ||
| 72 | 73 | ||
| 73 | #define preempt_enable() | 74 | #define preempt_enable() |
| 74 | #define preempt_disable() | 75 | #define preempt_disable() |
| 76 | #define cpu_has_feature(x) 1 | ||
| 77 | #define enable_kernel_altivec() | ||
| 78 | #define disable_kernel_altivec() | ||
| 75 | 79 | ||
| 76 | #endif /* __KERNEL__ */ | 80 | #endif /* __KERNEL__ */ |
| 77 | 81 | ||
diff --git a/drivers/md/raid6algos.c b/drivers/md/raid6algos.c index acf386fc4b4f..51c63c0cf1c9 100644 --- a/drivers/md/raid6algos.c +++ b/drivers/md/raid6algos.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include "raid6.h" | 19 | #include "raid6.h" |
| 20 | #ifndef __KERNEL__ | 20 | #ifndef __KERNEL__ |
| 21 | #include <sys/mman.h> | 21 | #include <sys/mman.h> |
| 22 | #include <stdio.h> | ||
| 22 | #endif | 23 | #endif |
| 23 | 24 | ||
| 24 | struct raid6_calls raid6_call; | 25 | struct raid6_calls raid6_call; |
diff --git a/drivers/md/raid6altivec.uc b/drivers/md/raid6altivec.uc index 1de8f030eee0..b9afd35b8812 100644 --- a/drivers/md/raid6altivec.uc +++ b/drivers/md/raid6altivec.uc | |||
| @@ -27,16 +27,20 @@ | |||
| 27 | #ifdef CONFIG_ALTIVEC | 27 | #ifdef CONFIG_ALTIVEC |
| 28 | 28 | ||
| 29 | #include <altivec.h> | 29 | #include <altivec.h> |
| 30 | #include <asm/system.h> | 30 | #ifdef __KERNEL__ |
| 31 | #include <asm/cputable.h> | 31 | # include <asm/system.h> |
| 32 | # include <asm/cputable.h> | ||
| 33 | #endif | ||
| 32 | 34 | ||
| 33 | /* | 35 | /* |
| 34 | * This is the C data type to use | 36 | * This is the C data type to use. We use a vector of |
| 37 | * signed char so vec_cmpgt() will generate the right | ||
| 38 | * instruction. | ||
| 35 | */ | 39 | */ |
| 36 | 40 | ||
| 37 | typedef vector unsigned char unative_t; | 41 | typedef vector signed char unative_t; |
| 38 | 42 | ||
| 39 | #define NBYTES(x) ((vector unsigned char) {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}) | 43 | #define NBYTES(x) ((vector signed char) {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}) |
| 40 | #define NSIZE sizeof(unative_t) | 44 | #define NSIZE sizeof(unative_t) |
| 41 | 45 | ||
| 42 | /* | 46 | /* |
| @@ -108,7 +112,11 @@ int raid6_have_altivec(void); | |||
| 108 | int raid6_have_altivec(void) | 112 | int raid6_have_altivec(void) |
| 109 | { | 113 | { |
| 110 | /* This assumes either all CPUs have Altivec or none does */ | 114 | /* This assumes either all CPUs have Altivec or none does */ |
| 115 | # ifdef __KERNEL__ | ||
| 111 | return cpu_has_feature(CPU_FTR_ALTIVEC); | 116 | return cpu_has_feature(CPU_FTR_ALTIVEC); |
| 117 | # else | ||
| 118 | return 1; | ||
| 119 | # endif | ||
| 112 | } | 120 | } |
| 113 | #endif | 121 | #endif |
| 114 | 122 | ||
diff --git a/drivers/md/raid6test/Makefile b/drivers/md/raid6test/Makefile index 557806728609..78e0396adf2a 100644 --- a/drivers/md/raid6test/Makefile +++ b/drivers/md/raid6test/Makefile | |||
| @@ -8,6 +8,8 @@ OPTFLAGS = -O2 # Adjust as desired | |||
| 8 | CFLAGS = -I.. -g $(OPTFLAGS) | 8 | CFLAGS = -I.. -g $(OPTFLAGS) |
| 9 | LD = ld | 9 | LD = ld |
| 10 | PERL = perl | 10 | PERL = perl |
| 11 | AR = ar | ||
| 12 | RANLIB = ranlib | ||
| 11 | 13 | ||
| 12 | .c.o: | 14 | .c.o: |
| 13 | $(CC) $(CFLAGS) -c -o $@ $< | 15 | $(CC) $(CFLAGS) -c -o $@ $< |
| @@ -18,18 +20,33 @@ PERL = perl | |||
| 18 | %.uc: ../%.uc | 20 | %.uc: ../%.uc |
| 19 | cp -f $< $@ | 21 | cp -f $< $@ |
| 20 | 22 | ||
| 21 | all: raid6.o raid6test | 23 | all: raid6.a raid6test |
| 22 | 24 | ||
| 23 | raid6.o: raid6int1.o raid6int2.o raid6int4.o raid6int8.o raid6int16.o \ | 25 | raid6.a: raid6int1.o raid6int2.o raid6int4.o raid6int8.o raid6int16.o \ |
| 24 | raid6int32.o \ | 26 | raid6int32.o \ |
| 25 | raid6mmx.o raid6sse1.o raid6sse2.o \ | 27 | raid6mmx.o raid6sse1.o raid6sse2.o \ |
| 28 | raid6altivec1.o raid6altivec2.o raid6altivec4.o raid6altivec8.o \ | ||
| 26 | raid6recov.o raid6algos.o \ | 29 | raid6recov.o raid6algos.o \ |
| 27 | raid6tables.o | 30 | raid6tables.o |
| 28 | $(LD) -r -o $@ $^ | 31 | rm -f $@ |
| 32 | $(AR) cq $@ $^ | ||
| 33 | $(RANLIB) $@ | ||
| 29 | 34 | ||
| 30 | raid6test: raid6.o test.c | 35 | raid6test: test.c raid6.a |
| 31 | $(CC) $(CFLAGS) -o raid6test $^ | 36 | $(CC) $(CFLAGS) -o raid6test $^ |
| 32 | 37 | ||
| 38 | raid6altivec1.c: raid6altivec.uc ../unroll.pl | ||
| 39 | $(PERL) ../unroll.pl 1 < raid6altivec.uc > $@ | ||
| 40 | |||
| 41 | raid6altivec2.c: raid6altivec.uc ../unroll.pl | ||
| 42 | $(PERL) ../unroll.pl 2 < raid6altivec.uc > $@ | ||
| 43 | |||
| 44 | raid6altivec4.c: raid6altivec.uc ../unroll.pl | ||
| 45 | $(PERL) ../unroll.pl 4 < raid6altivec.uc > $@ | ||
| 46 | |||
| 47 | raid6altivec8.c: raid6altivec.uc ../unroll.pl | ||
| 48 | $(PERL) ../unroll.pl 8 < raid6altivec.uc > $@ | ||
| 49 | |||
| 33 | raid6int1.c: raid6int.uc ../unroll.pl | 50 | raid6int1.c: raid6int.uc ../unroll.pl |
| 34 | $(PERL) ../unroll.pl 1 < raid6int.uc > $@ | 51 | $(PERL) ../unroll.pl 1 < raid6int.uc > $@ |
| 35 | 52 | ||
| @@ -52,7 +69,7 @@ raid6tables.c: mktables | |||
| 52 | ./mktables > raid6tables.c | 69 | ./mktables > raid6tables.c |
| 53 | 70 | ||
| 54 | clean: | 71 | clean: |
| 55 | rm -f *.o mktables mktables.c raid6int.uc raid6*.c raid6test | 72 | rm -f *.o *.a mktables mktables.c raid6int.uc raid6*.c raid6test |
| 56 | 73 | ||
| 57 | spotless: clean | 74 | spotless: clean |
| 58 | rm -f *~ | 75 | rm -f *~ |
