Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 16551
b: refs/heads/master
c: 2604b70
h: refs/heads/master
i:
  16549: 073791c
  16547: 1def45c
  16543: e8b4707
v: v3
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Jan 6, 2006
1 parent c47d1ff commit f1c3335
Show file tree
Hide file tree
Showing 13 changed files with 126 additions and 156 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a24a8dd858e0ba50f06a9fd8f61fe8c4fe7a8d8e
refs/heads/master: 2604b703b6b3db80e3c75ce472a54dfd0b7bf9f4
8 changes: 5 additions & 3 deletions trunk/drivers/md/faulty.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,10 @@ static int stop(mddev_t *mddev)
return 0;
}

static mdk_personality_t faulty_personality =
static struct mdk_personality faulty_personality =
{
.name = "faulty",
.level = LEVEL_FAULTY,
.owner = THIS_MODULE,
.make_request = make_request,
.run = run,
Expand All @@ -329,15 +330,16 @@ static mdk_personality_t faulty_personality =

static int __init raid_init(void)
{
return register_md_personality(FAULTY, &faulty_personality);
return register_md_personality(&faulty_personality);
}

static void raid_exit(void)
{
unregister_md_personality(FAULTY);
unregister_md_personality(&faulty_personality);
}

module_init(raid_init);
module_exit(raid_exit);
MODULE_LICENSE("GPL");
MODULE_ALIAS("md-personality-10"); /* faulty */
MODULE_ALIAS("md-level--5");
10 changes: 6 additions & 4 deletions trunk/drivers/md/linear.c
Original file line number Diff line number Diff line change
Expand Up @@ -351,9 +351,10 @@ static void linear_status (struct seq_file *seq, mddev_t *mddev)
}


static mdk_personality_t linear_personality=
static struct mdk_personality linear_personality =
{
.name = "linear",
.level = LEVEL_LINEAR,
.owner = THIS_MODULE,
.make_request = linear_make_request,
.run = linear_run,
Expand All @@ -363,16 +364,17 @@ static mdk_personality_t linear_personality=

static int __init linear_init (void)
{
return register_md_personality (LINEAR, &linear_personality);
return register_md_personality (&linear_personality);
}

static void linear_exit (void)
{
unregister_md_personality (LINEAR);
unregister_md_personality (&linear_personality);
}


module_init(linear_init);
module_exit(linear_exit);
MODULE_LICENSE("GPL");
MODULE_ALIAS("md-personality-1"); /* LINEAR */
MODULE_ALIAS("md-personality-1"); /* LINEAR - degrecated*/
MODULE_ALIAS("md-level--1");
79 changes: 29 additions & 50 deletions trunk/drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
static void autostart_arrays (int part);
#endif

static mdk_personality_t *pers[MAX_PERSONALITY];
static LIST_HEAD(pers_list);
static DEFINE_SPINLOCK(pers_lock);

/*
Expand Down Expand Up @@ -303,6 +303,15 @@ static mdk_rdev_t * find_rdev(mddev_t * mddev, dev_t dev)
return NULL;
}

static struct mdk_personality *find_pers(int level)
{
struct mdk_personality *pers;
list_for_each_entry(pers, &pers_list, list)
if (pers->level == level)
return pers;
return NULL;
}

static inline sector_t calc_dev_sboffset(struct block_device *bdev)
{
sector_t size = bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
Expand Down Expand Up @@ -1744,7 +1753,7 @@ static void analyze_sbs(mddev_t * mddev)
static ssize_t
level_show(mddev_t *mddev, char *page)
{
mdk_personality_t *p = mddev->pers;
struct mdk_personality *p = mddev->pers;
if (p == NULL && mddev->raid_disks == 0)
return 0;
if (mddev->level >= 0)
Expand Down Expand Up @@ -1960,11 +1969,12 @@ static int start_dirty_degraded;

static int do_md_run(mddev_t * mddev)
{
int pnum, err;
int err;
int chunk_size;
struct list_head *tmp;
mdk_rdev_t *rdev;
struct gendisk *disk;
struct mdk_personality *pers;
char b[BDEVNAME_SIZE];

if (list_empty(&mddev->disks))
Expand All @@ -1981,20 +1991,8 @@ static int do_md_run(mddev_t * mddev)
analyze_sbs(mddev);

chunk_size = mddev->chunk_size;
pnum = level_to_pers(mddev->level);

if ((pnum != MULTIPATH) && (pnum != RAID1)) {
if (!chunk_size) {
/*
* 'default chunksize' in the old md code used to
* be PAGE_SIZE, baaad.
* we abort here to be on the safe side. We don't
* want to continue the bad practice.
*/
printk(KERN_ERR
"no chunksize specified, see 'man raidtab'\n");
return -EINVAL;
}
if (chunk_size) {
if (chunk_size > MAX_CHUNK_SIZE) {
printk(KERN_ERR "too big chunk_size: %d > %d\n",
chunk_size, MAX_CHUNK_SIZE);
Expand Down Expand Up @@ -2030,10 +2028,7 @@ static int do_md_run(mddev_t * mddev)
}

#ifdef CONFIG_KMOD
if (!pers[pnum])
{
request_module("md-personality-%d", pnum);
}
request_module("md-level-%d", mddev->level);
#endif

/*
Expand All @@ -2055,14 +2050,14 @@ static int do_md_run(mddev_t * mddev)
return -ENOMEM;

spin_lock(&pers_lock);
if (!pers[pnum] || !try_module_get(pers[pnum]->owner)) {
pers = find_pers(mddev->level);
if (!pers || !try_module_get(pers->owner)) {
spin_unlock(&pers_lock);
printk(KERN_WARNING "md: personality %d is not loaded!\n",
pnum);
printk(KERN_WARNING "md: personality for level %d is not loaded!\n",
mddev->level);
return -EINVAL;
}

mddev->pers = pers[pnum];
mddev->pers = pers;
spin_unlock(&pers_lock);

mddev->recovery = 0;
Expand Down Expand Up @@ -3701,15 +3696,14 @@ static int md_seq_show(struct seq_file *seq, void *v)
struct list_head *tmp2;
mdk_rdev_t *rdev;
struct mdstat_info *mi = seq->private;
int i;
struct bitmap *bitmap;

if (v == (void*)1) {
struct mdk_personality *pers;
seq_printf(seq, "Personalities : ");
spin_lock(&pers_lock);
for (i = 0; i < MAX_PERSONALITY; i++)
if (pers[i])
seq_printf(seq, "[%s] ", pers[i]->name);
list_for_each_entry(pers, &pers_list, list)
seq_printf(seq, "[%s] ", pers->name);

spin_unlock(&pers_lock);
seq_printf(seq, "\n");
Expand Down Expand Up @@ -3870,35 +3864,20 @@ static struct file_operations md_seq_fops = {
.poll = mdstat_poll,
};

int register_md_personality(int pnum, mdk_personality_t *p)
int register_md_personality(struct mdk_personality *p)
{
if (pnum >= MAX_PERSONALITY) {
printk(KERN_ERR
"md: tried to install personality %s as nr %d, but max is %lu\n",
p->name, pnum, MAX_PERSONALITY-1);
return -EINVAL;
}

spin_lock(&pers_lock);
if (pers[pnum]) {
spin_unlock(&pers_lock);
return -EBUSY;
}

pers[pnum] = p;
printk(KERN_INFO "md: %s personality registered as nr %d\n", p->name, pnum);
list_add_tail(&p->list, &pers_list);
printk(KERN_INFO "md: %s personality registered for level %d\n", p->name, p->level);
spin_unlock(&pers_lock);
return 0;
}

int unregister_md_personality(int pnum)
int unregister_md_personality(struct mdk_personality *p)
{
if (pnum >= MAX_PERSONALITY)
return -EINVAL;

printk(KERN_INFO "md: %s personality unregistered\n", pers[pnum]->name);
printk(KERN_INFO "md: %s personality unregistered\n", p->name);
spin_lock(&pers_lock);
pers[pnum] = NULL;
list_del_init(&p->list);
spin_unlock(&pers_lock);
return 0;
}
Expand Down
11 changes: 5 additions & 6 deletions trunk/drivers/md/multipath.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@
#define NR_RESERVED_BUFS 32


static mdk_personality_t multipath_personality;


static void *mp_pool_alloc(gfp_t gfp_flags, void *data)
{
struct multipath_bh *mpb;
Expand Down Expand Up @@ -553,9 +550,10 @@ static int multipath_stop (mddev_t *mddev)
return 0;
}

static mdk_personality_t multipath_personality=
static struct mdk_personality multipath_personality =
{
.name = "multipath",
.level = LEVEL_MULTIPATH,
.owner = THIS_MODULE,
.make_request = multipath_make_request,
.run = multipath_run,
Expand All @@ -568,15 +566,16 @@ static mdk_personality_t multipath_personality=

static int __init multipath_init (void)
{
return register_md_personality (MULTIPATH, &multipath_personality);
return register_md_personality (&multipath_personality);
}

static void __exit multipath_exit (void)
{
unregister_md_personality (MULTIPATH);
unregister_md_personality (&multipath_personality);
}

module_init(multipath_init);
module_exit(multipath_exit);
MODULE_LICENSE("GPL");
MODULE_ALIAS("md-personality-7"); /* MULTIPATH */
MODULE_ALIAS("md-level--4");
14 changes: 10 additions & 4 deletions trunk/drivers/md/raid0.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,11 @@ static int raid0_run (mddev_t *mddev)
mdk_rdev_t *rdev;
struct list_head *tmp;

printk("%s: setting max_sectors to %d, segment boundary to %d\n",
if (mddev->chunk_size == 0) {
printk(KERN_ERR "md/raid0: non-zero chunk size required.\n");
return -EINVAL;
}
printk(KERN_INFO "%s: setting max_sectors to %d, segment boundary to %d\n",
mdname(mddev),
mddev->chunk_size >> 9,
(mddev->chunk_size>>1)-1);
Expand Down Expand Up @@ -507,9 +511,10 @@ static void raid0_status (struct seq_file *seq, mddev_t *mddev)
return;
}

static mdk_personality_t raid0_personality=
static struct mdk_personality raid0_personality=
{
.name = "raid0",
.level = 0,
.owner = THIS_MODULE,
.make_request = raid0_make_request,
.run = raid0_run,
Expand All @@ -519,15 +524,16 @@ static mdk_personality_t raid0_personality=

static int __init raid0_init (void)
{
return register_md_personality (RAID0, &raid0_personality);
return register_md_personality (&raid0_personality);
}

static void raid0_exit (void)
{
unregister_md_personality (RAID0);
unregister_md_personality (&raid0_personality);
}

module_init(raid0_init);
module_exit(raid0_exit);
MODULE_LICENSE("GPL");
MODULE_ALIAS("md-personality-2"); /* RAID0 */
MODULE_ALIAS("md-level-0");
9 changes: 5 additions & 4 deletions trunk/drivers/md/raid1.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
*/
#define NR_RAID1_BIOS 256

static mdk_personality_t raid1_personality;

static void unplug_slaves(mddev_t *mddev);

Expand Down Expand Up @@ -2036,9 +2035,10 @@ static void raid1_quiesce(mddev_t *mddev, int state)
}


static mdk_personality_t raid1_personality =
static struct mdk_personality raid1_personality =
{
.name = "raid1",
.level = 1,
.owner = THIS_MODULE,
.make_request = make_request,
.run = run,
Expand All @@ -2056,15 +2056,16 @@ static mdk_personality_t raid1_personality =

static int __init raid_init(void)
{
return register_md_personality(RAID1, &raid1_personality);
return register_md_personality(&raid1_personality);
}

static void raid_exit(void)
{
unregister_md_personality(RAID1);
unregister_md_personality(&raid1_personality);
}

module_init(raid_init);
module_exit(raid_exit);
MODULE_LICENSE("GPL");
MODULE_ALIAS("md-personality-3"); /* RAID1 */
MODULE_ALIAS("md-level-1");
Loading

0 comments on commit f1c3335

Please sign in to comment.