git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ACPI / power: Avoid maybe-uninitialized warning
[pandora-kernel.git]
/
drivers
/
md
/
dm-raid1.c
diff --git
a/drivers/md/dm-raid1.c
b/drivers/md/dm-raid1.c
index
976ad46
..
b4361eb
100644
(file)
--- a/
drivers/md/dm-raid1.c
+++ b/
drivers/md/dm-raid1.c
@@
-22,8
+22,6
@@
#define DM_MSG_PREFIX "raid1"
#define MAX_RECOVERY 1 /* Maximum number of regions recovered in parallel. */
#define DM_MSG_PREFIX "raid1"
#define MAX_RECOVERY 1 /* Maximum number of regions recovered in parallel. */
-#define DM_IO_PAGES 64
-#define DM_KCOPYD_PAGES 64
#define DM_RAID1_HANDLE_ERRORS 0x01
#define errors_handled(p) ((p)->features & DM_RAID1_HANDLE_ERRORS)
#define DM_RAID1_HANDLE_ERRORS 0x01
#define errors_handled(p) ((p)->features & DM_RAID1_HANDLE_ERRORS)
@@
-605,6
+603,15
@@
static void write_callback(unsigned long error, void *context)
return;
}
return;
}
+ /*
+ * If the bio is discard, return an error, but do not
+ * degrade the array.
+ */
+ if (bio->bi_rw & REQ_DISCARD) {
+ bio_endio(bio, -EOPNOTSUPP);
+ return;
+ }
+
for (i = 0; i < ms->nr_mirrors; i++)
if (test_bit(i, &error))
fail_mirror(ms->mirror + i, DM_RAID1_WRITE_ERROR);
for (i = 0; i < ms->nr_mirrors; i++)
if (test_bit(i, &error))
fail_mirror(ms->mirror + i, DM_RAID1_WRITE_ERROR);
@@
-887,7
+894,7
@@
static struct mirror_set *alloc_context(unsigned int nr_mirrors,
return NULL;
}
return NULL;
}
- ms->io_client = dm_io_client_create(
DM_IO_PAGES
);
+ ms->io_client = dm_io_client_create();
if (IS_ERR(ms->io_client)) {
ti->error = "Error creating dm_io client";
mempool_destroy(ms->read_record_pool);
if (IS_ERR(ms->io_client)) {
ti->error = "Error creating dm_io client";
mempool_destroy(ms->read_record_pool);
@@
-1082,6
+1089,7
@@
static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
ti->split_io = dm_rh_get_region_size(ms->rh);
ti->num_flush_requests = 1;
ti->num_discard_requests = 1;
ti->split_io = dm_rh_get_region_size(ms->rh);
ti->num_flush_requests = 1;
ti->num_discard_requests = 1;
+ ti->discard_zeroes_data_unsupported = 1;
ms->kmirrord_wq = alloc_workqueue("kmirrord",
WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
ms->kmirrord_wq = alloc_workqueue("kmirrord",
WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
@@
-1117,9
+1125,11
@@
static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto err_destroy_wq;
}
goto err_destroy_wq;
}
- r = dm_kcopyd_client_create(DM_KCOPYD_PAGES, &ms->kcopyd_client);
- if (r)
+ ms->kcopyd_client = dm_kcopyd_client_create();
+ if (IS_ERR(ms->kcopyd_client)) {
+ r = PTR_ERR(ms->kcopyd_client);
goto err_destroy_wq;
goto err_destroy_wq;
+ }
wakeup_mirrord(ms);
return 0;
wakeup_mirrord(ms);
return 0;
@@
-1210,7
+1220,7
@@
static int mirror_end_io(struct dm_target *ti, struct bio *bio,
* We need to dec pending if this was a write.
*/
if (rw == WRITE) {
* We need to dec pending if this was a write.
*/
if (rw == WRITE) {
- if (!(bio->bi_rw &
REQ_FLUSH
))
+ if (!(bio->bi_rw &
(REQ_FLUSH | REQ_DISCARD)
))
dm_rh_dec(ms->rh, map_context->ll);
return error;
}
dm_rh_dec(ms->rh, map_context->ll);
return error;
}
@@
-1357,8
+1367,8
@@
static char device_status_char(struct mirror *m)
}
}
-static
int
mirror_status(struct dm_target *ti, status_type_t type,
-
char *result, unsigned int
maxlen)
+static
void
mirror_status(struct dm_target *ti, status_type_t type,
+
char *result, unsigned
maxlen)
{
unsigned int m, sz = 0;
struct mirror_set *ms = (struct mirror_set *) ti->private;
{
unsigned int m, sz = 0;
struct mirror_set *ms = (struct mirror_set *) ti->private;
@@
-1393,8
+1403,6
@@
static int mirror_status(struct dm_target *ti, status_type_t type,
if (ms->features & DM_RAID1_HANDLE_ERRORS)
DMEMIT(" 1 handle_errors");
}
if (ms->features & DM_RAID1_HANDLE_ERRORS)
DMEMIT(" 1 handle_errors");
}
-
- return 0;
}
static int mirror_iterate_devices(struct dm_target *ti,
}
static int mirror_iterate_devices(struct dm_target *ti,
@@
-1413,7
+1421,7
@@
static int mirror_iterate_devices(struct dm_target *ti,
static struct target_type mirror_target = {
.name = "mirror",
static struct target_type mirror_target = {
.name = "mirror",
- .version = {1, 12,
1
},
+ .version = {1, 12,
2
},
.module = THIS_MODULE,
.ctr = mirror_ctr,
.dtr = mirror_dtr,
.module = THIS_MODULE,
.ctr = mirror_ctr,
.dtr = mirror_dtr,