Exemplo n.º 1
0
Arquivo: raid0.c Projeto: mhei/linux
static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
{
    int i, c, err;
    sector_t curr_zone_end, sectors;
    struct md_rdev *smallest, *rdev1, *rdev2, *rdev, **dev;
    struct strip_zone *zone;
    int cnt;
    char b[BDEVNAME_SIZE];
    char b2[BDEVNAME_SIZE];
    struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
    unsigned short blksize = 512;

    *private_conf = ERR_PTR(-ENOMEM);
    if (!conf)
        return -ENOMEM;
    rdev_for_each(rdev1, mddev) {
        pr_debug("md/raid0:%s: looking at %s\n",
                 mdname(mddev),
                 bdevname(rdev1->bdev, b));
        c = 0;

        /* round size to chunk_size */
        sectors = rdev1->sectors;
        sector_div(sectors, mddev->chunk_sectors);
        rdev1->sectors = sectors * mddev->chunk_sectors;

        blksize = max(blksize, queue_logical_block_size(
                          rdev1->bdev->bd_disk->queue));

        rdev_for_each(rdev2, mddev) {
            pr_debug("md/raid0:%s:   comparing %s(%llu)"
                     " with %s(%llu)\n",
                     mdname(mddev),
                     bdevname(rdev1->bdev,b),
                     (unsigned long long)rdev1->sectors,
                     bdevname(rdev2->bdev,b2),
                     (unsigned long long)rdev2->sectors);
            if (rdev2 == rdev1) {
                pr_debug("md/raid0:%s:   END\n",
                         mdname(mddev));
                break;
            }
            if (rdev2->sectors == rdev1->sectors) {
                /*
                 * Not unique, don't count it as a new
                 * group
                 */
                pr_debug("md/raid0:%s:   EQUAL\n",
                         mdname(mddev));
                c = 1;
                break;
            }
            pr_debug("md/raid0:%s:   NOT EQUAL\n",
                     mdname(mddev));
        }
Exemplo n.º 2
0
void ecmd_loadfslib(const char *fsname) {
   spstr mdname = ecmd_readstr("fslist", fsname);

   if (mdname.trim().length()) {
      spstr mdfname = ecmd_readstr("MODULES", mdname());

      if (mod_query(mdname(),MODQ_NOINCR)==0)
         if (load_module(mdfname, 0))
            log_printf("Module \"%s\" loaded to handle %s\n", mdname(), fsname);
   }
}
Exemplo n.º 3
0
/*
 * inform the user of the raid configuration
*/
static void dump_zones(struct mddev *mddev)
{
	int j, k;
	sector_t zone_size = 0;
	sector_t zone_start = 0;
	char b[BDEVNAME_SIZE];
	struct r0conf *conf = mddev->private;
	int raid_disks = conf->strip_zone[0].nb_dev;
	printk(KERN_INFO "md: RAID0 configuration for %s - %d zone%s\n",
	       mdname(mddev),
	       conf->nr_strip_zones, conf->nr_strip_zones==1?"":"s");
	for (j = 0; j < conf->nr_strip_zones; j++) {
		printk(KERN_INFO "md: zone%d=[", j);
		for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
			printk(KERN_CONT "%s%s", k?"/":"",
			bdevname(conf->devlist[j*raid_disks
						+ k]->bdev, b));
		printk(KERN_CONT "]\n");

		zone_size  = conf->strip_zone[j].zone_end - zone_start;
		printk(KERN_INFO "      zone-offset=%10lluKB, "
				"device-offset=%10lluKB, size=%10lluKB\n",
			(unsigned long long)zone_start>>1,
			(unsigned long long)conf->strip_zone[j].dev_start>>1,
			(unsigned long long)zone_size>>1);
		zone_start = conf->strip_zone[j].zone_end;
	}
	printk(KERN_INFO "\n");
}
Exemplo n.º 4
0
Arquivo: raid0.c Projeto: lumag/linux
/*
 * inform the user of the raid configuration
*/
static void dump_zones(struct mddev *mddev)
{
	int j, k;
	sector_t zone_size = 0;
	sector_t zone_start = 0;
	char b[BDEVNAME_SIZE];
	struct r0conf *conf = mddev->private;
	int raid_disks = conf->strip_zone[0].nb_dev;
	pr_debug("md: RAID0 configuration for %s - %d zone%s\n",
		 mdname(mddev),
		 conf->nr_strip_zones, conf->nr_strip_zones==1?"":"s");
	for (j = 0; j < conf->nr_strip_zones; j++) {
		char line[200];
		int len = 0;

		for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
			len += snprintf(line+len, 200-len, "%s%s", k?"/":"",
					bdevname(conf->devlist[j*raid_disks
							       + k]->bdev, b));
		pr_debug("md: zone%d=[%s]\n", j, line);

		zone_size  = conf->strip_zone[j].zone_end - zone_start;
		pr_debug("      zone-offset=%10lluKB, device-offset=%10lluKB, size=%10lluKB\n",
			(unsigned long long)zone_start>>1,
			(unsigned long long)conf->strip_zone[j].dev_start>>1,
			(unsigned long long)zone_size>>1);
		zone_start = conf->strip_zone[j].zone_end;
	}
}
Exemplo n.º 5
0
static int new_disk_ack(struct mddev *mddev, bool ack)
{
	struct md_cluster_info *cinfo = mddev->cluster_info;

	if (!test_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state)) {
		pr_warn("md-cluster(%s): Spurious cluster confirmation\n", mdname(mddev));
		return -EINVAL;
	}

	if (ack)
		dlm_unlock_sync(cinfo->no_new_dev_lockres);
	complete(&cinfo->newdisk_completion);
	return 0;
}
Exemplo n.º 6
0
static inline char * bmname(struct bitmap *bitmap)
{
	return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
}