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
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[pandora-kernel.git]
/
drivers
/
md
/
dm-mpath.c
diff --git
a/drivers/md/dm-mpath.c
b/drivers/md/dm-mpath.c
index
f9b7b32
..
93f701e
100644
(file)
--- a/
drivers/md/dm-mpath.c
+++ b/
drivers/md/dm-mpath.c
@@
-21,6
+21,7
@@
#include <linux/workqueue.h>
#include <asm/atomic.h>
#include <linux/workqueue.h>
#include <asm/atomic.h>
+#define DM_MSG_PREFIX "multipath"
#define MESG_STR(x) x, sizeof(x)
/* Path properties */
#define MESG_STR(x) x, sizeof(x)
/* Path properties */
@@
-179,8
+180,7
@@
static struct multipath *alloc_multipath(void)
m->queue_io = 1;
INIT_WORK(&m->process_queued_ios, process_queued_ios, m);
INIT_WORK(&m->trigger_event, trigger_event, m);
m->queue_io = 1;
INIT_WORK(&m->process_queued_ios, process_queued_ios, m);
INIT_WORK(&m->trigger_event, trigger_event, m);
- m->mpio_pool = mempool_create(MIN_IOS, mempool_alloc_slab,
- mempool_free_slab, _mpio_cache);
+ m->mpio_pool = mempool_create_slab_pool(MIN_IOS, _mpio_cache);
if (!m->mpio_pool) {
kfree(m);
return NULL;
if (!m->mpio_pool) {
kfree(m);
return NULL;
@@
-447,8
+447,6
@@
struct param {
char *error;
};
char *error;
};
-#define ESTR(s) ("dm-multipath: " s)
-
static int read_param(struct param *param, char *str, unsigned *v, char **error)
{
if (!str ||
static int read_param(struct param *param, char *str, unsigned *v, char **error)
{
if (!str ||
@@
-496,12
+494,12
@@
static int parse_path_selector(struct arg_set *as, struct priority_group *pg,
unsigned ps_argc;
static struct param _params[] = {
unsigned ps_argc;
static struct param _params[] = {
- {0, 1024,
ESTR("invalid number of path selector args")
},
+ {0, 1024,
"invalid number of path selector args"
},
};
pst = dm_get_path_selector(shift(as));
if (!pst) {
};
pst = dm_get_path_selector(shift(as));
if (!pst) {
- ti->error =
ESTR("unknown path selector type")
;
+ ti->error =
"unknown path selector type"
;
return -EINVAL;
}
return -EINVAL;
}
@@
-512,7
+510,7
@@
static int parse_path_selector(struct arg_set *as, struct priority_group *pg,
r = pst->create(&pg->ps, ps_argc, as->argv);
if (r) {
dm_put_path_selector(pst);
r = pst->create(&pg->ps, ps_argc, as->argv);
if (r) {
dm_put_path_selector(pst);
- ti->error =
ESTR("path selector constructor failed")
;
+ ti->error =
"path selector constructor failed"
;
return r;
}
return r;
}
@@
-530,7
+528,7
@@
static struct pgpath *parse_path(struct arg_set *as, struct path_selector *ps,
/* we need at least a path arg */
if (as->argc < 1) {
/* we need at least a path arg */
if (as->argc < 1) {
- ti->error =
ESTR("no device given")
;
+ ti->error =
"no device given"
;
return NULL;
}
return NULL;
}
@@
-541,7
+539,7
@@
static struct pgpath *parse_path(struct arg_set *as, struct path_selector *ps,
r = dm_get_device(ti, shift(as), ti->begin, ti->len,
dm_table_get_mode(ti->table), &p->path.dev);
if (r) {
r = dm_get_device(ti, shift(as), ti->begin, ti->len,
dm_table_get_mode(ti->table), &p->path.dev);
if (r) {
- ti->error =
ESTR("error getting device")
;
+ ti->error =
"error getting device"
;
goto bad;
}
goto bad;
}
@@
-563,8
+561,8
@@
static struct priority_group *parse_priority_group(struct arg_set *as,
struct dm_target *ti)
{
static struct param _params[] = {
struct dm_target *ti)
{
static struct param _params[] = {
- {1, 1024,
ESTR("invalid number of paths")
},
- {0, 1024,
ESTR("invalid number of selector args")
}
+ {1, 1024,
"invalid number of paths"
},
+ {0, 1024,
"invalid number of selector args"
}
};
int r;
};
int r;
@@
-573,13
+571,13
@@
static struct priority_group *parse_priority_group(struct arg_set *as,
if (as->argc < 2) {
as->argc = 0;
if (as->argc < 2) {
as->argc = 0;
- ti->error =
ESTR("not enough priority group aruments")
;
+ ti->error =
"not enough priority group aruments"
;
return NULL;
}
pg = alloc_priority_group();
if (!pg) {
return NULL;
}
pg = alloc_priority_group();
if (!pg) {
- ti->error =
ESTR("couldn't allocate priority group")
;
+ ti->error =
"couldn't allocate priority group"
;
return NULL;
}
pg->m = m;
return NULL;
}
pg->m = m;
@@
-634,7
+632,7
@@
static int parse_hw_handler(struct arg_set *as, struct multipath *m,
unsigned hw_argc;
static struct param _params[] = {
unsigned hw_argc;
static struct param _params[] = {
- {0, 1024,
ESTR("invalid number of hardware handler args")
},
+ {0, 1024,
"invalid number of hardware handler args"
},
};
r = read_param(_params, shift(as), &hw_argc, &ti->error);
};
r = read_param(_params, shift(as), &hw_argc, &ti->error);
@@
-646,14
+644,14
@@
static int parse_hw_handler(struct arg_set *as, struct multipath *m,
hwht = dm_get_hw_handler(shift(as));
if (!hwht) {
hwht = dm_get_hw_handler(shift(as));
if (!hwht) {
- ti->error =
ESTR("unknown hardware handler type")
;
+ ti->error =
"unknown hardware handler type"
;
return -EINVAL;
}
r = hwht->create(&m->hw_handler, hw_argc - 1, as->argv);
if (r) {
dm_put_hw_handler(hwht);
return -EINVAL;
}
r = hwht->create(&m->hw_handler, hw_argc - 1, as->argv);
if (r) {
dm_put_hw_handler(hwht);
- ti->error =
ESTR("hardware handler constructor failed")
;
+ ti->error =
"hardware handler constructor failed"
;
return r;
}
return r;
}
@@
-670,7
+668,7
@@
static int parse_features(struct arg_set *as, struct multipath *m,
unsigned argc;
static struct param _params[] = {
unsigned argc;
static struct param _params[] = {
- {0, 1,
ESTR("invalid number of feature args")
},
+ {0, 1,
"invalid number of feature args"
},
};
r = read_param(_params, shift(as), &argc, &ti->error);
};
r = read_param(_params, shift(as), &argc, &ti->error);
@@
-693,8
+691,8
@@
static int multipath_ctr(struct dm_target *ti, unsigned int argc,
{
/* target parameters */
static struct param _params[] = {
{
/* target parameters */
static struct param _params[] = {
- {1, 1024,
ESTR("invalid number of priority groups")
},
- {1, 1024,
ESTR("invalid initial priority group number")
},
+ {1, 1024,
"invalid number of priority groups"
},
+ {1, 1024,
"invalid initial priority group number"
},
};
int r;
};
int r;
@@
-708,10
+706,12
@@
static int multipath_ctr(struct dm_target *ti, unsigned int argc,
m = alloc_multipath();
if (!m) {
m = alloc_multipath();
if (!m) {
- ti->error =
ESTR("can't allocate multipath")
;
+ ti->error =
"can't allocate multipath"
;
return -EINVAL;
}
return -EINVAL;
}
+ m->ti = ti;
+
r = parse_features(&as, m, ti);
if (r)
goto bad;
r = parse_features(&as, m, ti);
if (r)
goto bad;
@@
-747,13
+747,12
@@
static int multipath_ctr(struct dm_target *ti, unsigned int argc,
}
if (pg_count != m->nr_priority_groups) {
}
if (pg_count != m->nr_priority_groups) {
- ti->error =
ESTR("priority group count mismatch")
;
+ ti->error =
"priority group count mismatch"
;
r = -EINVAL;
goto bad;
}
ti->private = m;
r = -EINVAL;
goto bad;
}
ti->private = m;
- m->ti = ti;
return 0;
return 0;
@@
-808,7
+807,7
@@
static int fail_path(struct pgpath *pgpath)
if (!pgpath->path.is_active)
goto out;
if (!pgpath->path.is_active)
goto out;
- DMWARN("
dm-multipath:
Failing path %s.", pgpath->path.dev->name);
+ DMWARN("Failing path %s.", pgpath->path.dev->name);
pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path);
pgpath->path.is_active = 0;
pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path);
pgpath->path.is_active = 0;
@@
-1000,6
+999,7
@@
static int do_end_io(struct multipath *m, struct bio *bio,
{
struct hw_handler *hwh = &m->hw_handler;
unsigned err_flags = MP_FAIL_PATH; /* Default behavior */
{
struct hw_handler *hwh = &m->hw_handler;
unsigned err_flags = MP_FAIL_PATH; /* Default behavior */
+ unsigned long flags;
if (!error)
return 0; /* I/O complete */
if (!error)
return 0; /* I/O complete */
@@
-1010,17
+1010,17
@@
static int do_end_io(struct multipath *m, struct bio *bio,
if (error == -EOPNOTSUPP)
return error;
if (error == -EOPNOTSUPP)
return error;
- spin_lock
(&m->lock
);
+ spin_lock
_irqsave(&m->lock, flags
);
if (!m->nr_valid_paths) {
if (!m->queue_if_no_path) {
if (!m->nr_valid_paths) {
if (!m->queue_if_no_path) {
- spin_unlock
(&m->lock
);
+ spin_unlock
_irqrestore(&m->lock, flags
);
return -EIO;
} else {
return -EIO;
} else {
- spin_unlock
(&m->lock
);
+ spin_unlock
_irqrestore(&m->lock, flags
);
goto requeue;
}
}
goto requeue;
}
}
- spin_unlock
(&m->lock
);
+ spin_unlock
_irqrestore(&m->lock, flags
);
if (hwh->type && hwh->type->error)
err_flags = hwh->type->error(hwh, bio);
if (hwh->type && hwh->type->error)
err_flags = hwh->type->error(hwh, bio);
@@
-1040,12
+1040,12
@@
static int do_end_io(struct multipath *m, struct bio *bio,
dm_bio_restore(&mpio->details, bio);
/* queue for the daemon to resubmit or fail */
dm_bio_restore(&mpio->details, bio);
/* queue for the daemon to resubmit or fail */
- spin_lock
(&m->lock
);
+ spin_lock
_irqsave(&m->lock, flags
);
bio_list_add(&m->queued_ios, bio);
m->queue_size++;
if (!m->queue_io)
queue_work(kmultipathd, &m->process_queued_ios);
bio_list_add(&m->queued_ios, bio);
m->queue_size++;
if (!m->queue_io)
queue_work(kmultipathd, &m->process_queued_ios);
- spin_unlock
(&m->lock
);
+ spin_unlock
_irqrestore(&m->lock, flags
);
return 1; /* io not complete */
}
return 1; /* io not complete */
}
@@
-1250,7
+1250,7
@@
static int multipath_message(struct dm_target *ti, unsigned argc, char **argv)
r = dm_get_device(ti, argv[1], ti->begin, ti->len,
dm_table_get_mode(ti->table), &dev);
if (r) {
r = dm_get_device(ti, argv[1], ti->begin, ti->len,
dm_table_get_mode(ti->table), &dev);
if (r) {
- DMWARN("
dm-multipath
message: error getting device %s",
+ DMWARN("message: error getting device %s",
argv[1]);
return -EINVAL;
}
argv[1]);
return -EINVAL;
}
@@
-1309,7
+1309,7
@@
static int __init dm_multipath_init(void)
return -ENOMEM;
}
return -ENOMEM;
}
- DMINFO("
dm-multipath
version %u.%u.%u loaded",
+ DMINFO("version %u.%u.%u loaded",
multipath_target.version[0], multipath_target.version[1],
multipath_target.version[2]);
multipath_target.version[0], multipath_target.version[1],
multipath_target.version[2]);