md.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:89k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.    md.c : Multiple Devices driver for Linux
  3.   Copyright (C) 1998, 1999, 2000 Ingo Molnar
  4.      completely rewritten, based on the MD driver code from Marc Zyngier
  5.    Changes:
  6.    - RAID-1/RAID-5 extensions by Miguel de Icaza, Gadi Oxman, Ingo Molnar
  7.    - boot support for linear and striped mode by Harald Hoyer <HarryH@Royal.Net>
  8.    - kerneld support by Boris Tobotras <boris@xtalk.msk.su>
  9.    - kmod support by: Cyrus Durgin
  10.    - RAID0 bugfixes: Mark Anthony Lisher <markal@iname.com>
  11.    - Devfs support by Richard Gooch <rgooch@atnf.csiro.au>
  12.    - lots of fixes and improvements to the RAID1/RAID5 and generic
  13.      RAID code (such as request based resynchronization):
  14.      Neil Brown <neilb@cse.unsw.edu.au>.
  15.    This program is free software; you can redistribute it and/or modify
  16.    it under the terms of the GNU General Public License as published by
  17.    the Free Software Foundation; either version 2, or (at your option)
  18.    any later version.
  19.    You should have received a copy of the GNU General Public License
  20.    (for example /usr/src/linux/COPYING); if not, write to the Free
  21.    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22. */
  23. #include <linux/module.h>
  24. #include <linux/config.h>
  25. #include <linux/raid/md.h>
  26. #include <linux/sysctl.h>
  27. #include <linux/raid/xor.h>
  28. #include <linux/devfs_fs_kernel.h>
  29. #include <linux/init.h>
  30. #ifdef CONFIG_KMOD
  31. #include <linux/kmod.h>
  32. #endif
  33. #define __KERNEL_SYSCALLS__
  34. #include <linux/unistd.h>
  35. #include <asm/unaligned.h>
  36. #define MAJOR_NR MD_MAJOR
  37. #define MD_DRIVER
  38. #include <linux/blk.h>
  39. #define DEBUG 0
  40. #if DEBUG
  41. # define dprintk(x...) printk(x)
  42. #else
  43. # define dprintk(x...) do { } while(0)
  44. #endif
  45. #ifndef MODULE
  46. static void autostart_arrays (void);
  47. #endif
  48. static mdk_personality_t *pers[MAX_PERSONALITY];
  49. /*
  50.  * Current RAID-1,4,5 parallel reconstruction 'guaranteed speed limit'
  51.  * is 100 KB/sec, so the extra system load does not show up that much.
  52.  * Increase it if you want to have more _guaranteed_ speed. Note that
  53.  * the RAID driver will use the maximum available bandwith if the IO
  54.  * subsystem is idle. There is also an 'absolute maximum' reconstruction
  55.  * speed limit - in case reconstruction slows down your system despite
  56.  * idle IO detection.
  57.  *
  58.  * you can change it via /proc/sys/dev/raid/speed_limit_min and _max.
  59.  */
  60. static int sysctl_speed_limit_min = 100;
  61. static int sysctl_speed_limit_max = 100000;
  62. static struct ctl_table_header *raid_table_header;
  63. static ctl_table raid_table[] = {
  64. {DEV_RAID_SPEED_LIMIT_MIN, "speed_limit_min",
  65.  &sysctl_speed_limit_min, sizeof(int), 0644, NULL, &proc_dointvec},
  66. {DEV_RAID_SPEED_LIMIT_MAX, "speed_limit_max",
  67.  &sysctl_speed_limit_max, sizeof(int), 0644, NULL, &proc_dointvec},
  68. {0}
  69. };
  70. static ctl_table raid_dir_table[] = {
  71. {DEV_RAID, "raid", NULL, 0, 0555, raid_table},
  72. {0}
  73. };
  74. static ctl_table raid_root_table[] = {
  75. {CTL_DEV, "dev", NULL, 0, 0555, raid_dir_table},
  76. {0}
  77. };
  78. /*
  79.  * these have to be allocated separately because external
  80.  * subsystems want to have a pre-defined structure
  81.  */
  82. struct hd_struct md_hd_struct[MAX_MD_DEVS];
  83. static int md_blocksizes[MAX_MD_DEVS];
  84. static int md_hardsect_sizes[MAX_MD_DEVS];
  85. static int md_maxreadahead[MAX_MD_DEVS];
  86. static mdk_thread_t *md_recovery_thread;
  87. int md_size[MAX_MD_DEVS];
  88. static struct block_device_operations md_fops;
  89. static devfs_handle_t devfs_handle;
  90. static struct gendisk md_gendisk=
  91. {
  92. major: MD_MAJOR,
  93. major_name: "md",
  94. minor_shift: 0,
  95. max_p: 1,
  96. part: md_hd_struct,
  97. sizes: md_size,
  98. nr_real: MAX_MD_DEVS,
  99. real_devices: NULL,
  100. next: NULL,
  101. fops: &md_fops,
  102. };
  103. /*
  104.  * Enables to iterate over all existing md arrays
  105.  */
  106. static MD_LIST_HEAD(all_mddevs);
  107. /*
  108.  * The mapping between kdev and mddev is not necessary a simple
  109.  * one! Eg. HSM uses several sub-devices to implement Logical
  110.  * Volumes. All these sub-devices map to the same mddev.
  111.  */
  112. dev_mapping_t mddev_map[MAX_MD_DEVS];
  113. void add_mddev_mapping(mddev_t * mddev, kdev_t dev, void *data)
  114. {
  115. unsigned int minor = MINOR(dev);
  116. if (MAJOR(dev) != MD_MAJOR) {
  117. MD_BUG();
  118. return;
  119. }
  120. if (mddev_map[minor].mddev) {
  121. MD_BUG();
  122. return;
  123. }
  124. mddev_map[minor].mddev = mddev;
  125. mddev_map[minor].data = data;
  126. }
  127. void del_mddev_mapping(mddev_t * mddev, kdev_t dev)
  128. {
  129. unsigned int minor = MINOR(dev);
  130. if (MAJOR(dev) != MD_MAJOR) {
  131. MD_BUG();
  132. return;
  133. }
  134. if (mddev_map[minor].mddev != mddev) {
  135. MD_BUG();
  136. return;
  137. }
  138. mddev_map[minor].mddev = NULL;
  139. mddev_map[minor].data = NULL;
  140. }
  141. static int md_make_request(request_queue_t *q, int rw, struct buffer_head * bh)
  142. {
  143. mddev_t *mddev = kdev_to_mddev(bh->b_rdev);
  144. if (mddev && mddev->pers)
  145. return mddev->pers->make_request(mddev, rw, bh);
  146. else {
  147. buffer_IO_error(bh);
  148. return 0;
  149. }
  150. }
  151. static mddev_t * alloc_mddev(kdev_t dev)
  152. {
  153. mddev_t *mddev;
  154. if (MAJOR(dev) != MD_MAJOR) {
  155. MD_BUG();
  156. return 0;
  157. }
  158. mddev = (mddev_t *) kmalloc(sizeof(*mddev), GFP_KERNEL);
  159. if (!mddev)
  160. return NULL;
  161. memset(mddev, 0, sizeof(*mddev));
  162. mddev->__minor = MINOR(dev);
  163. init_MUTEX(&mddev->reconfig_sem);
  164. init_MUTEX(&mddev->recovery_sem);
  165. init_MUTEX(&mddev->resync_sem);
  166. MD_INIT_LIST_HEAD(&mddev->disks);
  167. MD_INIT_LIST_HEAD(&mddev->all_mddevs);
  168. atomic_set(&mddev->active, 0);
  169. /*
  170.  * The 'base' mddev is the one with data NULL.
  171.  * personalities can create additional mddevs
  172.  * if necessary.
  173.  */
  174. add_mddev_mapping(mddev, dev, 0);
  175. md_list_add(&mddev->all_mddevs, &all_mddevs);
  176. MOD_INC_USE_COUNT;
  177. return mddev;
  178. }
  179. mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr)
  180. {
  181. mdk_rdev_t * rdev;
  182. struct md_list_head *tmp;
  183. ITERATE_RDEV(mddev,rdev,tmp) {
  184. if (rdev->desc_nr == nr)
  185. return rdev;
  186. }
  187. return NULL;
  188. }
  189. mdk_rdev_t * find_rdev(mddev_t * mddev, kdev_t dev)
  190. {
  191. struct md_list_head *tmp;
  192. mdk_rdev_t *rdev;
  193. ITERATE_RDEV(mddev,rdev,tmp) {
  194. if (rdev->dev == dev)
  195. return rdev;
  196. }
  197. return NULL;
  198. }
  199. static MD_LIST_HEAD(device_names);
  200. char * partition_name(kdev_t dev)
  201. {
  202. struct gendisk *hd;
  203. static char nomem [] = "<nomem>";
  204. dev_name_t *dname;
  205. struct md_list_head *tmp = device_names.next;
  206. while (tmp != &device_names) {
  207. dname = md_list_entry(tmp, dev_name_t, list);
  208. if (dname->dev == dev)
  209. return dname->name;
  210. tmp = tmp->next;
  211. }
  212. dname = (dev_name_t *) kmalloc(sizeof(*dname), GFP_KERNEL);
  213. if (!dname)
  214. return nomem;
  215. /*
  216.  * ok, add this new device name to the list
  217.  */
  218. hd = get_gendisk (dev);
  219. dname->name = NULL;
  220. if (hd)
  221. dname->name = disk_name (hd, MINOR(dev), dname->namebuf);
  222. if (!dname->name) {
  223. sprintf (dname->namebuf, "[dev %s]", kdevname(dev));
  224. dname->name = dname->namebuf;
  225. }
  226. dname->dev = dev;
  227. MD_INIT_LIST_HEAD(&dname->list);
  228. md_list_add(&dname->list, &device_names);
  229. return dname->name;
  230. }
  231. static unsigned int calc_dev_sboffset(kdev_t dev, mddev_t *mddev,
  232. int persistent)
  233. {
  234. unsigned int size = 0;
  235. if (blk_size[MAJOR(dev)])
  236. size = blk_size[MAJOR(dev)][MINOR(dev)];
  237. if (persistent)
  238. size = MD_NEW_SIZE_BLOCKS(size);
  239. return size;
  240. }
  241. static unsigned int calc_dev_size(kdev_t dev, mddev_t *mddev, int persistent)
  242. {
  243. unsigned int size;
  244. size = calc_dev_sboffset(dev, mddev, persistent);
  245. if (!mddev->sb) {
  246. MD_BUG();
  247. return size;
  248. }
  249. if (mddev->sb->chunk_size)
  250. size &= ~(mddev->sb->chunk_size/1024 - 1);
  251. return size;
  252. }
  253. static unsigned int zoned_raid_size(mddev_t *mddev)
  254. {
  255. unsigned int mask;
  256. mdk_rdev_t * rdev;
  257. struct md_list_head *tmp;
  258. if (!mddev->sb) {
  259. MD_BUG();
  260. return -EINVAL;
  261. }
  262. /*
  263.  * do size and offset calculations.
  264.  */
  265. mask = ~(mddev->sb->chunk_size/1024 - 1);
  266. ITERATE_RDEV(mddev,rdev,tmp) {
  267. rdev->size &= mask;
  268. md_size[mdidx(mddev)] += rdev->size;
  269. }
  270. return 0;
  271. }
  272. /*
  273.  * We check wether all devices are numbered from 0 to nb_dev-1. The
  274.  * order is guaranteed even after device name changes.
  275.  *
  276.  * Some personalities (raid0, linear) use this. Personalities that
  277.  * provide data have to be able to deal with loss of individual
  278.  * disks, so they do their checking themselves.
  279.  */
  280. int md_check_ordering(mddev_t *mddev)
  281. {
  282. int i, c;
  283. mdk_rdev_t *rdev;
  284. struct md_list_head *tmp;
  285. /*
  286.  * First, all devices must be fully functional
  287.  */
  288. ITERATE_RDEV(mddev,rdev,tmp) {
  289. if (rdev->faulty) {
  290. printk(KERN_ERR "md: md%d's device %s faulty, aborting.n",
  291.        mdidx(mddev), partition_name(rdev->dev));
  292. goto abort;
  293. }
  294. }
  295. c = 0;
  296. ITERATE_RDEV(mddev,rdev,tmp) {
  297. c++;
  298. }
  299. if (c != mddev->nb_dev) {
  300. MD_BUG();
  301. goto abort;
  302. }
  303. if (mddev->nb_dev != mddev->sb->raid_disks) {
  304. printk(KERN_ERR "md: md%d, array needs %d disks, has %d, aborting.n",
  305. mdidx(mddev), mddev->sb->raid_disks, mddev->nb_dev);
  306. goto abort;
  307. }
  308. /*
  309.  * Now the numbering check
  310.  */
  311. for (i = 0; i < mddev->nb_dev; i++) {
  312. c = 0;
  313. ITERATE_RDEV(mddev,rdev,tmp) {
  314. if (rdev->desc_nr == i)
  315. c++;
  316. }
  317. if (!c) {
  318. printk(KERN_ERR "md: md%d, missing disk #%d, aborting.n",
  319.        mdidx(mddev), i);
  320. goto abort;
  321. }
  322. if (c > 1) {
  323. printk(KERN_ERR "md: md%d, too many disks #%d, aborting.n",
  324.        mdidx(mddev), i);
  325. goto abort;
  326. }
  327. }
  328. return 0;
  329. abort:
  330. return 1;
  331. }
  332. static void remove_descriptor(mdp_disk_t *disk, mdp_super_t *sb)
  333. {
  334. if (disk_active(disk)) {
  335. sb->working_disks--;
  336. } else {
  337. if (disk_spare(disk)) {
  338. sb->spare_disks--;
  339. sb->working_disks--;
  340. } else {
  341. sb->failed_disks--;
  342. }
  343. }
  344. sb->nr_disks--;
  345. disk->major = 0;
  346. disk->minor = 0;
  347. mark_disk_removed(disk);
  348. }
  349. #define BAD_MAGIC KERN_ERR 
  350. "md: invalid raid superblock magic on %sn"
  351. #define BAD_MINOR KERN_ERR 
  352. "md: %s: invalid raid minor (%x)n"
  353. #define OUT_OF_MEM KERN_ALERT 
  354. "md: out of memory.n"
  355. #define NO_SB KERN_ERR 
  356. "md: disabled device %s, could not read superblock.n"
  357. #define BAD_CSUM KERN_WARNING 
  358. "md: invalid superblock checksum on %sn"
  359. static int alloc_array_sb(mddev_t * mddev)
  360. {
  361. if (mddev->sb) {
  362. MD_BUG();
  363. return 0;
  364. }
  365. mddev->sb = (mdp_super_t *) __get_free_page (GFP_KERNEL);
  366. if (!mddev->sb)
  367. return -ENOMEM;
  368. md_clear_page(mddev->sb);
  369. return 0;
  370. }
  371. static int alloc_disk_sb(mdk_rdev_t * rdev)
  372. {
  373. if (rdev->sb)
  374. MD_BUG();
  375. rdev->sb = (mdp_super_t *) __get_free_page(GFP_KERNEL);
  376. if (!rdev->sb) {
  377. printk(OUT_OF_MEM);
  378. return -EINVAL;
  379. }
  380. md_clear_page(rdev->sb);
  381. return 0;
  382. }
  383. static void free_disk_sb(mdk_rdev_t * rdev)
  384. {
  385. if (rdev->sb) {
  386. free_page((unsigned long) rdev->sb);
  387. rdev->sb = NULL;
  388. rdev->sb_offset = 0;
  389. rdev->size = 0;
  390. } else {
  391. if (!rdev->faulty)
  392. MD_BUG();
  393. }
  394. }
  395. static int read_disk_sb(mdk_rdev_t * rdev)
  396. {
  397. int ret = -EINVAL;
  398. struct buffer_head *bh = NULL;
  399. kdev_t dev = rdev->dev;
  400. mdp_super_t *sb;
  401. unsigned long sb_offset;
  402. if (!rdev->sb) {
  403. MD_BUG();
  404. goto abort;
  405. }
  406. /*
  407.  * Calculate the position of the superblock,
  408.  * it's at the end of the disk
  409.  */
  410. sb_offset = calc_dev_sboffset(rdev->dev, rdev->mddev, 1);
  411. rdev->sb_offset = sb_offset;
  412. fsync_dev(dev);
  413. set_blocksize (dev, MD_SB_BYTES);
  414. bh = bread (dev, sb_offset / MD_SB_BLOCKS, MD_SB_BYTES);
  415. if (bh) {
  416. sb = (mdp_super_t *) bh->b_data;
  417. memcpy (rdev->sb, sb, MD_SB_BYTES);
  418. } else {
  419. printk(NO_SB,partition_name(rdev->dev));
  420. goto abort;
  421. }
  422. printk(KERN_INFO " [events: %08lx]n", (unsigned long)rdev->sb->events_lo);
  423. ret = 0;
  424. abort:
  425. if (bh)
  426. brelse (bh);
  427. return ret;
  428. }
  429. static unsigned int calc_sb_csum(mdp_super_t * sb)
  430. {
  431. unsigned int disk_csum, csum;
  432. disk_csum = sb->sb_csum;
  433. sb->sb_csum = 0;
  434. csum = csum_partial((void *)sb, MD_SB_BYTES, 0);
  435. sb->sb_csum = disk_csum;
  436. return csum;
  437. }
  438. /*
  439.  * Check one RAID superblock for generic plausibility
  440.  */
  441. static int check_disk_sb(mdk_rdev_t * rdev)
  442. {
  443. mdp_super_t *sb;
  444. int ret = -EINVAL;
  445. sb = rdev->sb;
  446. if (!sb) {
  447. MD_BUG();
  448. goto abort;
  449. }
  450. if (sb->md_magic != MD_SB_MAGIC) {
  451. printk(BAD_MAGIC, partition_name(rdev->dev));
  452. goto abort;
  453. }
  454. if (sb->md_minor >= MAX_MD_DEVS) {
  455. printk(BAD_MINOR, partition_name(rdev->dev), sb->md_minor);
  456. goto abort;
  457. }
  458. if (calc_sb_csum(sb) != sb->sb_csum) {
  459. printk(BAD_CSUM, partition_name(rdev->dev));
  460. goto abort;
  461. }
  462. ret = 0;
  463. abort:
  464. return ret;
  465. }
  466. static kdev_t dev_unit(kdev_t dev)
  467. {
  468. unsigned int mask;
  469. struct gendisk *hd = get_gendisk(dev);
  470. if (!hd)
  471. return 0;
  472. mask = ~((1 << hd->minor_shift) - 1);
  473. return MKDEV(MAJOR(dev), MINOR(dev) & mask);
  474. }
  475. static mdk_rdev_t * match_dev_unit(mddev_t *mddev, kdev_t dev)
  476. {
  477. struct md_list_head *tmp;
  478. mdk_rdev_t *rdev;
  479. ITERATE_RDEV(mddev,rdev,tmp)
  480. if (dev_unit(rdev->dev) == dev_unit(dev))
  481. return rdev;
  482. return NULL;
  483. }
  484. static int match_mddev_units(mddev_t *mddev1, mddev_t *mddev2)
  485. {
  486. struct md_list_head *tmp;
  487. mdk_rdev_t *rdev;
  488. ITERATE_RDEV(mddev1,rdev,tmp)
  489. if (match_dev_unit(mddev2, rdev->dev))
  490. return 1;
  491. return 0;
  492. }
  493. static MD_LIST_HEAD(all_raid_disks);
  494. static MD_LIST_HEAD(pending_raid_disks);
  495. static void bind_rdev_to_array(mdk_rdev_t * rdev, mddev_t * mddev)
  496. {
  497. mdk_rdev_t *same_pdev;
  498. if (rdev->mddev) {
  499. MD_BUG();
  500. return;
  501. }
  502. same_pdev = match_dev_unit(mddev, rdev->dev);
  503. if (same_pdev)
  504. printk( KERN_WARNING
  505. "md%d: WARNING: %s appears to be on the same physical disk as %s. Truen"
  506. "     protection against single-disk failure might be compromised.n",
  507. mdidx(mddev), partition_name(rdev->dev),
  508. partition_name(same_pdev->dev));
  509. md_list_add(&rdev->same_set, &mddev->disks);
  510. rdev->mddev = mddev;
  511. mddev->nb_dev++;
  512. printk(KERN_INFO "md: bind<%s,%d>n", partition_name(rdev->dev), mddev->nb_dev);
  513. }
  514. static void unbind_rdev_from_array(mdk_rdev_t * rdev)
  515. {
  516. if (!rdev->mddev) {
  517. MD_BUG();
  518. return;
  519. }
  520. md_list_del(&rdev->same_set);
  521. MD_INIT_LIST_HEAD(&rdev->same_set);
  522. rdev->mddev->nb_dev--;
  523. printk(KERN_INFO "md: unbind<%s,%d>n", partition_name(rdev->dev),
  524.  rdev->mddev->nb_dev);
  525. rdev->mddev = NULL;
  526. }
  527. /*
  528.  * prevent the device from being mounted, repartitioned or
  529.  * otherwise reused by a RAID array (or any other kernel
  530.  * subsystem), by opening the device. [simply getting an
  531.  * inode is not enough, the SCSI module usage code needs
  532.  * an explicit open() on the device]
  533.  */
  534. static int lock_rdev(mdk_rdev_t *rdev)
  535. {
  536. int err = 0;
  537. struct block_device *bdev;
  538. bdev = bdget(rdev->dev);
  539. if (!bdev)
  540. return -ENOMEM;
  541. err = blkdev_get(bdev, FMODE_READ|FMODE_WRITE, 0, BDEV_RAW);
  542. if (!err)
  543. rdev->bdev = bdev;
  544. return err;
  545. }
  546. static void unlock_rdev(mdk_rdev_t *rdev)
  547. {
  548. struct block_device *bdev = rdev->bdev;
  549. rdev->bdev = NULL;
  550. if (!bdev)
  551. MD_BUG();
  552. blkdev_put(bdev, BDEV_RAW);
  553. }
  554. void md_autodetect_dev(kdev_t dev);
  555. static void export_rdev(mdk_rdev_t * rdev)
  556. {
  557. printk(KERN_INFO "md: export_rdev(%s)n",partition_name(rdev->dev));
  558. if (rdev->mddev)
  559. MD_BUG();
  560. unlock_rdev(rdev);
  561. free_disk_sb(rdev);
  562. md_list_del(&rdev->all);
  563. MD_INIT_LIST_HEAD(&rdev->all);
  564. if (rdev->pending.next != &rdev->pending) {
  565. printk(KERN_INFO "md: (%s was pending)n",
  566. partition_name(rdev->dev));
  567. md_list_del(&rdev->pending);
  568. MD_INIT_LIST_HEAD(&rdev->pending);
  569. }
  570. #ifndef MODULE
  571. md_autodetect_dev(rdev->dev);
  572. #endif
  573. rdev->dev = 0;
  574. rdev->faulty = 0;
  575. kfree(rdev);
  576. }
  577. static void kick_rdev_from_array(mdk_rdev_t * rdev)
  578. {
  579. unbind_rdev_from_array(rdev);
  580. export_rdev(rdev);
  581. }
  582. static void export_array(mddev_t *mddev)
  583. {
  584. struct md_list_head *tmp;
  585. mdk_rdev_t *rdev;
  586. mdp_super_t *sb = mddev->sb;
  587. if (mddev->sb) {
  588. mddev->sb = NULL;
  589. free_page((unsigned long) sb);
  590. }
  591. ITERATE_RDEV(mddev,rdev,tmp) {
  592. if (!rdev->mddev) {
  593. MD_BUG();
  594. continue;
  595. }
  596. kick_rdev_from_array(rdev);
  597. }
  598. if (mddev->nb_dev)
  599. MD_BUG();
  600. }
  601. static void free_mddev(mddev_t *mddev)
  602. {
  603. if (!mddev) {
  604. MD_BUG();
  605. return;
  606. }
  607. export_array(mddev);
  608. md_size[mdidx(mddev)] = 0;
  609. md_hd_struct[mdidx(mddev)].nr_sects = 0;
  610. /*
  611.  * Make sure nobody else is using this mddev
  612.  * (careful, we rely on the global kernel lock here)
  613.  */
  614. while (sem_getcount(&mddev->resync_sem) != 1)
  615. schedule();
  616. while (sem_getcount(&mddev->recovery_sem) != 1)
  617. schedule();
  618. del_mddev_mapping(mddev, MKDEV(MD_MAJOR, mdidx(mddev)));
  619. md_list_del(&mddev->all_mddevs);
  620. MD_INIT_LIST_HEAD(&mddev->all_mddevs);
  621. kfree(mddev);
  622. MOD_DEC_USE_COUNT;
  623. }
  624. #undef BAD_CSUM
  625. #undef BAD_MAGIC
  626. #undef OUT_OF_MEM
  627. #undef NO_SB
  628. static void print_desc(mdp_disk_t *desc)
  629. {
  630. printk(" DISK<N:%d,%s(%d,%d),R:%d,S:%d>n", desc->number,
  631. partition_name(MKDEV(desc->major,desc->minor)),
  632. desc->major,desc->minor,desc->raid_disk,desc->state);
  633. }
  634. static void print_sb(mdp_super_t *sb)
  635. {
  636. int i;
  637. printk(KERN_INFO "md:  SB: (V:%d.%d.%d) ID:<%08x.%08x.%08x.%08x> CT:%08xn",
  638. sb->major_version, sb->minor_version, sb->patch_version,
  639. sb->set_uuid0, sb->set_uuid1, sb->set_uuid2, sb->set_uuid3,
  640. sb->ctime);
  641. printk(KERN_INFO "md:     L%d S%08d ND:%d RD:%d md%d LO:%d CS:%dn", sb->level,
  642. sb->size, sb->nr_disks, sb->raid_disks, sb->md_minor,
  643. sb->layout, sb->chunk_size);
  644. printk(KERN_INFO "md:     UT:%08x ST:%d AD:%d WD:%d FD:%d SD:%d CSUM:%08x E:%08lxn",
  645. sb->utime, sb->state, sb->active_disks, sb->working_disks,
  646. sb->failed_disks, sb->spare_disks,
  647. sb->sb_csum, (unsigned long)sb->events_lo);
  648. printk(KERN_INFO);
  649. for (i = 0; i < MD_SB_DISKS; i++) {
  650. mdp_disk_t *desc;
  651. desc = sb->disks + i;
  652. if (desc->number || desc->major || desc->minor ||
  653.     desc->raid_disk || (desc->state && (desc->state != 4))) {
  654. printk("     D %2d: ", i);
  655. print_desc(desc);
  656. }
  657. }
  658. printk(KERN_INFO "md:     THIS: ");
  659. print_desc(&sb->this_disk);
  660. }
  661. static void print_rdev(mdk_rdev_t *rdev)
  662. {
  663. printk(KERN_INFO "md: rdev %s: O:%s, SZ:%08ld F:%d DN:%d ",
  664. partition_name(rdev->dev), partition_name(rdev->old_dev),
  665. rdev->size, rdev->faulty, rdev->desc_nr);
  666. if (rdev->sb) {
  667. printk(KERN_INFO "md: rdev superblock:n");
  668. print_sb(rdev->sb);
  669. } else
  670. printk(KERN_INFO "md: no rdev superblock!n");
  671. }
  672. void md_print_devices(void)
  673. {
  674. struct md_list_head *tmp, *tmp2;
  675. mdk_rdev_t *rdev;
  676. mddev_t *mddev;
  677. printk("n");
  678. printk("md: **********************************n");
  679. printk("md: * <COMPLETE RAID STATE PRINTOUT> *n");
  680. printk("md: **********************************n");
  681. ITERATE_MDDEV(mddev,tmp) {
  682. printk("md%d: ", mdidx(mddev));
  683. ITERATE_RDEV(mddev,rdev,tmp2)
  684. printk("<%s>", partition_name(rdev->dev));
  685. if (mddev->sb) {
  686. printk(" array superblock:n");
  687. print_sb(mddev->sb);
  688. } else
  689. printk(" no array superblock.n");
  690. ITERATE_RDEV(mddev,rdev,tmp2)
  691. print_rdev(rdev);
  692. }
  693. printk("md: **********************************n");
  694. printk("n");
  695. }
  696. static int sb_equal(mdp_super_t *sb1, mdp_super_t *sb2)
  697. {
  698. int ret;
  699. mdp_super_t *tmp1, *tmp2;
  700. tmp1 = kmalloc(sizeof(*tmp1),GFP_KERNEL);
  701. tmp2 = kmalloc(sizeof(*tmp2),GFP_KERNEL);
  702. if (!tmp1 || !tmp2) {
  703. ret = 0;
  704. printk(KERN_INFO "md.c: sb1 is not equal to sb2!n");
  705. goto abort;
  706. }
  707. *tmp1 = *sb1;
  708. *tmp2 = *sb2;
  709. /*
  710.  * nr_disks is not constant
  711.  */
  712. tmp1->nr_disks = 0;
  713. tmp2->nr_disks = 0;
  714. if (memcmp(tmp1, tmp2, MD_SB_GENERIC_CONSTANT_WORDS * 4))
  715. ret = 0;
  716. else
  717. ret = 1;
  718. abort:
  719. if (tmp1)
  720. kfree(tmp1);
  721. if (tmp2)
  722. kfree(tmp2);
  723. return ret;
  724. }
  725. static int uuid_equal(mdk_rdev_t *rdev1, mdk_rdev_t *rdev2)
  726. {
  727. if ( (rdev1->sb->set_uuid0 == rdev2->sb->set_uuid0) &&
  728. (rdev1->sb->set_uuid1 == rdev2->sb->set_uuid1) &&
  729. (rdev1->sb->set_uuid2 == rdev2->sb->set_uuid2) &&
  730. (rdev1->sb->set_uuid3 == rdev2->sb->set_uuid3))
  731. return 1;
  732. return 0;
  733. }
  734. static mdk_rdev_t * find_rdev_all(kdev_t dev)
  735. {
  736. struct md_list_head *tmp;
  737. mdk_rdev_t *rdev;
  738. tmp = all_raid_disks.next;
  739. while (tmp != &all_raid_disks) {
  740. rdev = md_list_entry(tmp, mdk_rdev_t, all);
  741. if (rdev->dev == dev)
  742. return rdev;
  743. tmp = tmp->next;
  744. }
  745. return NULL;
  746. }
  747. #define GETBLK_FAILED KERN_ERR 
  748. "md: getblk failed for device %sn"
  749. static int write_disk_sb(mdk_rdev_t * rdev)
  750. {
  751. struct buffer_head *bh;
  752. kdev_t dev;
  753. unsigned long sb_offset, size;
  754. mdp_super_t *sb;
  755. if (!rdev->sb) {
  756. MD_BUG();
  757. return 1;
  758. }
  759. if (rdev->faulty) {
  760. MD_BUG();
  761. return 1;
  762. }
  763. if (rdev->sb->md_magic != MD_SB_MAGIC) {
  764. MD_BUG();
  765. return 1;
  766. }
  767. dev = rdev->dev;
  768. sb_offset = calc_dev_sboffset(dev, rdev->mddev, 1);
  769. if (rdev->sb_offset != sb_offset) {
  770. printk(KERN_INFO "%s's sb offset has changed from %ld to %ld, skippingn",
  771.        partition_name(dev), rdev->sb_offset, sb_offset);
  772. goto skip;
  773. }
  774. /*
  775.  * If the disk went offline meanwhile and it's just a spare, then
  776.  * its size has changed to zero silently, and the MD code does
  777.  * not yet know that it's faulty.
  778.  */
  779. size = calc_dev_size(dev, rdev->mddev, 1);
  780. if (size != rdev->size) {
  781. printk(KERN_INFO "%s's size has changed from %ld to %ld since import, skippingn",
  782.        partition_name(dev), rdev->size, size);
  783. goto skip;
  784. }
  785. printk(KERN_INFO "(write) %s's sb offset: %ldn", partition_name(dev), sb_offset);
  786. fsync_dev(dev);
  787. set_blocksize(dev, MD_SB_BYTES);
  788. bh = getblk(dev, sb_offset / MD_SB_BLOCKS, MD_SB_BYTES);
  789. if (!bh) {
  790. printk(GETBLK_FAILED, partition_name(dev));
  791. return 1;
  792. }
  793. memset(bh->b_data,0,bh->b_size);
  794. sb = (mdp_super_t *) bh->b_data;
  795. memcpy(sb, rdev->sb, MD_SB_BYTES);
  796. mark_buffer_uptodate(bh, 1);
  797. mark_buffer_dirty(bh);
  798. ll_rw_block(WRITE, 1, &bh);
  799. wait_on_buffer(bh);
  800. brelse(bh);
  801. fsync_dev(dev);
  802. skip:
  803. return 0;
  804. }
  805. #undef GETBLK_FAILED
  806. static void set_this_disk(mddev_t *mddev, mdk_rdev_t *rdev)
  807. {
  808. int i, ok = 0;
  809. mdp_disk_t *desc;
  810. for (i = 0; i < MD_SB_DISKS; i++) {
  811. desc = mddev->sb->disks + i;
  812. #if 0
  813. if (disk_faulty(desc)) {
  814. if (MKDEV(desc->major,desc->minor) == rdev->dev)
  815. ok = 1;
  816. continue;
  817. }
  818. #endif
  819. if (MKDEV(desc->major,desc->minor) == rdev->dev) {
  820. rdev->sb->this_disk = *desc;
  821. rdev->desc_nr = desc->number;
  822. ok = 1;
  823. break;
  824. }
  825. }
  826. if (!ok) {
  827. MD_BUG();
  828. }
  829. }
  830. static int sync_sbs(mddev_t * mddev)
  831. {
  832. mdk_rdev_t *rdev;
  833. mdp_super_t *sb;
  834. struct md_list_head *tmp;
  835. ITERATE_RDEV(mddev,rdev,tmp) {
  836. if (rdev->faulty || rdev->alias_device)
  837. continue;
  838. sb = rdev->sb;
  839. *sb = *mddev->sb;
  840. set_this_disk(mddev, rdev);
  841. sb->sb_csum = calc_sb_csum(sb);
  842. }
  843. return 0;
  844. }
  845. int md_update_sb(mddev_t * mddev)
  846. {
  847. int err, count = 100;
  848. struct md_list_head *tmp;
  849. mdk_rdev_t *rdev;
  850. if (!mddev->sb_dirty) {
  851. printk("hm, md_update_sb() called without ->sb_dirty == 1, from %p.n", __builtin_return_address(0));
  852. return 0;
  853. }
  854. mddev->sb_dirty = 0;
  855. repeat:
  856. mddev->sb->utime = CURRENT_TIME;
  857. if ((++mddev->sb->events_lo)==0)
  858. ++mddev->sb->events_hi;
  859. if ((mddev->sb->events_lo|mddev->sb->events_hi)==0) {
  860. /*
  861.  * oops, this 64-bit counter should never wrap.
  862.  * Either we are in around ~1 trillion A.C., assuming
  863.  * 1 reboot per second, or we have a bug:
  864.  */
  865. MD_BUG();
  866. mddev->sb->events_lo = mddev->sb->events_hi = 0xffffffff;
  867. }
  868. sync_sbs(mddev);
  869. /*
  870.  * do not write anything to disk if using
  871.  * nonpersistent superblocks
  872.  */
  873. if (mddev->sb->not_persistent)
  874. return 0;
  875. printk(KERN_INFO "md: updating md%d RAID superblock on devicen",
  876. mdidx(mddev));
  877. err = 0;
  878. ITERATE_RDEV(mddev,rdev,tmp) {
  879. printk(KERN_INFO "md: ");
  880. if (rdev->faulty)
  881. printk("(skipping faulty ");
  882. if (rdev->alias_device)
  883. printk("(skipping alias ");
  884. printk("%s ", partition_name(rdev->dev));
  885. if (!rdev->faulty && !rdev->alias_device) {
  886. printk("[events: %08lx]",
  887. (unsigned long)rdev->sb->events_lo);
  888. err += write_disk_sb(rdev);
  889. } else
  890. printk(")n");
  891. }
  892. if (err) {
  893. if (--count) {
  894. printk(KERN_ERR "md: errors occurred during superblock update, repeatingn");
  895. goto repeat;
  896. }
  897. printk(KERN_ERR "md: excessive errors occurred during superblock update, exitingn");
  898. }
  899. return 0;
  900. }
  901. /*
  902.  * Import a device. If 'on_disk', then sanity check the superblock
  903.  *
  904.  * mark the device faulty if:
  905.  *
  906.  *   - the device is nonexistent (zero size)
  907.  *   - the device has no valid superblock
  908.  *
  909.  * a faulty rdev _never_ has rdev->sb set.
  910.  */
  911. static int md_import_device(kdev_t newdev, int on_disk)
  912. {
  913. int err;
  914. mdk_rdev_t *rdev;
  915. unsigned int size;
  916. if (find_rdev_all(newdev))
  917. return -EEXIST;
  918. rdev = (mdk_rdev_t *) kmalloc(sizeof(*rdev), GFP_KERNEL);
  919. if (!rdev) {
  920. printk(KERN_ERR "md: could not alloc mem for %s!n", partition_name(newdev));
  921. return -ENOMEM;
  922. }
  923. memset(rdev, 0, sizeof(*rdev));
  924. if (is_mounted(newdev)) {
  925. printk(KERN_WARNING "md: can not import %s, has active inodes!n",
  926. partition_name(newdev));
  927. err = -EBUSY;
  928. goto abort_free;
  929. }
  930. if ((err = alloc_disk_sb(rdev)))
  931. goto abort_free;
  932. rdev->dev = newdev;
  933. if (lock_rdev(rdev)) {
  934. printk(KERN_ERR "md: could not lock %s, zero-size? Marking faulty.n",
  935. partition_name(newdev));
  936. err = -EINVAL;
  937. goto abort_free;
  938. }
  939. rdev->desc_nr = -1;
  940. rdev->faulty = 0;
  941. size = 0;
  942. if (blk_size[MAJOR(newdev)])
  943. size = blk_size[MAJOR(newdev)][MINOR(newdev)];
  944. if (!size) {
  945. printk(KERN_WARNING "md: %s has zero size, marking faulty!n",
  946. partition_name(newdev));
  947. err = -EINVAL;
  948. goto abort_free;
  949. }
  950. if (on_disk) {
  951. if ((err = read_disk_sb(rdev))) {
  952. printk(KERN_WARNING "md: could not read %s's sb, not importing!n",
  953.        partition_name(newdev));
  954. goto abort_free;
  955. }
  956. if ((err = check_disk_sb(rdev))) {
  957. printk(KERN_WARNING "md: %s has invalid sb, not importing!n",
  958.        partition_name(newdev));
  959. goto abort_free;
  960. }
  961. if (rdev->sb->level != -4) {
  962. rdev->old_dev = MKDEV(rdev->sb->this_disk.major,
  963. rdev->sb->this_disk.minor);
  964. rdev->desc_nr = rdev->sb->this_disk.number;
  965. } else {
  966. rdev->old_dev = MKDEV(0, 0);
  967. rdev->desc_nr = -1;
  968. }
  969. }
  970. md_list_add(&rdev->all, &all_raid_disks);
  971. MD_INIT_LIST_HEAD(&rdev->pending);
  972. if (rdev->faulty && rdev->sb)
  973. free_disk_sb(rdev);
  974. return 0;
  975. abort_free:
  976. if (rdev->sb) {
  977. if (rdev->bdev)
  978. unlock_rdev(rdev);
  979. free_disk_sb(rdev);
  980. }
  981. kfree(rdev);
  982. return err;
  983. }
  984. /*
  985.  * Check a full RAID array for plausibility
  986.  */
  987. #define INCONSISTENT KERN_ERR 
  988. "md: fatal superblock inconsistency in %s -- removing from arrayn"
  989. #define OUT_OF_DATE KERN_ERR 
  990. "md: superblock update time inconsistency -- using the most recent onen"
  991. #define OLD_VERSION KERN_ALERT 
  992. "md: md%d: unsupported raid array version %d.%d.%dn"
  993. #define NOT_CLEAN_IGNORE KERN_ERR 
  994. "md: md%d: raid array is not clean -- starting background reconstructionn"
  995. #define UNKNOWN_LEVEL KERN_ERR 
  996. "md: md%d: unsupported raid level %dn"
  997. static int analyze_sbs(mddev_t * mddev)
  998. {
  999. int out_of_date = 0, i, first;
  1000. struct md_list_head *tmp, *tmp2;
  1001. mdk_rdev_t *rdev, *rdev2, *freshest;
  1002. mdp_super_t *sb;
  1003. /*
  1004.  * Verify the RAID superblock on each real device
  1005.  */
  1006. ITERATE_RDEV(mddev,rdev,tmp) {
  1007. if (rdev->faulty) {
  1008. MD_BUG();
  1009. goto abort;
  1010. }
  1011. if (!rdev->sb) {
  1012. MD_BUG();
  1013. goto abort;
  1014. }
  1015. if (check_disk_sb(rdev))
  1016. goto abort;
  1017. }
  1018. /*
  1019.  * The superblock constant part has to be the same
  1020.  * for all disks in the array.
  1021.  */
  1022. sb = NULL;
  1023. ITERATE_RDEV(mddev,rdev,tmp) {
  1024. if (!sb) {
  1025. sb = rdev->sb;
  1026. continue;
  1027. }
  1028. if (!sb_equal(sb, rdev->sb)) {
  1029. printk(INCONSISTENT, partition_name(rdev->dev));
  1030. kick_rdev_from_array(rdev);
  1031. continue;
  1032. }
  1033. }
  1034. /*
  1035.  * OK, we have all disks and the array is ready to run. Let's
  1036.  * find the freshest superblock, that one will be the superblock
  1037.  * that represents the whole array.
  1038.  */
  1039. if (!mddev->sb)
  1040. if (alloc_array_sb(mddev))
  1041. goto abort;
  1042. sb = mddev->sb;
  1043. freshest = NULL;
  1044. ITERATE_RDEV(mddev,rdev,tmp) {
  1045. __u64 ev1, ev2;
  1046. /*
  1047.  * if the checksum is invalid, use the superblock
  1048.  * only as a last resort. (decrease it's age by
  1049.  * one event)
  1050.  */
  1051. if (calc_sb_csum(rdev->sb) != rdev->sb->sb_csum) {
  1052. if (rdev->sb->events_lo || rdev->sb->events_hi)
  1053. if ((rdev->sb->events_lo--)==0)
  1054. rdev->sb->events_hi--;
  1055. }
  1056. printk(KERN_INFO "md: %s's event counter: %08lxn",
  1057.        partition_name(rdev->dev),
  1058. (unsigned long)rdev->sb->events_lo);
  1059. if (!freshest) {
  1060. freshest = rdev;
  1061. continue;
  1062. }
  1063. /*
  1064.  * Find the newest superblock version
  1065.  */
  1066. ev1 = md_event(rdev->sb);
  1067. ev2 = md_event(freshest->sb);
  1068. if (ev1 != ev2) {
  1069. out_of_date = 1;
  1070. if (ev1 > ev2)
  1071. freshest = rdev;
  1072. }
  1073. }
  1074. if (out_of_date) {
  1075. printk(OUT_OF_DATE);
  1076. printk(KERN_INFO "md: freshest: %sn", partition_name(freshest->dev));
  1077. }
  1078. memcpy (sb, freshest->sb, sizeof(*sb));
  1079. /*
  1080.  * at this point we have picked the 'best' superblock
  1081.  * from all available superblocks.
  1082.  * now we validate this superblock and kick out possibly
  1083.  * failed disks.
  1084.  */
  1085. ITERATE_RDEV(mddev,rdev,tmp) {
  1086. /*
  1087.  * Kick all non-fresh devices
  1088.  */
  1089. __u64 ev1, ev2;
  1090. ev1 = md_event(rdev->sb);
  1091. ev2 = md_event(sb);
  1092. ++ev1;
  1093. if (ev1 < ev2) {
  1094. printk(KERN_WARNING "md: kicking non-fresh %s from array!n",
  1095. partition_name(rdev->dev));
  1096. kick_rdev_from_array(rdev);
  1097. continue;
  1098. }
  1099. }
  1100. /*
  1101.  * Fix up changed device names ... but only if this disk has a
  1102.  * recent update time. Use faulty checksum ones too.
  1103.  */
  1104. if (mddev->sb->level != -4)
  1105. ITERATE_RDEV(mddev,rdev,tmp) {
  1106. __u64 ev1, ev2, ev3;
  1107. if (rdev->faulty || rdev->alias_device) {
  1108. MD_BUG();
  1109. goto abort;
  1110. }
  1111. ev1 = md_event(rdev->sb);
  1112. ev2 = md_event(sb);
  1113. ev3 = ev2;
  1114. --ev3;
  1115. if ((rdev->dev != rdev->old_dev) &&
  1116. ((ev1 == ev2) || (ev1 == ev3))) {
  1117. mdp_disk_t *desc;
  1118. printk(KERN_WARNING "md: device name has changed from %s to %s since last import!n",
  1119.        partition_name(rdev->old_dev), partition_name(rdev->dev));
  1120. if (rdev->desc_nr == -1) {
  1121. MD_BUG();
  1122. goto abort;
  1123. }
  1124. desc = &sb->disks[rdev->desc_nr];
  1125. if (rdev->old_dev != MKDEV(desc->major, desc->minor)) {
  1126. MD_BUG();
  1127. goto abort;
  1128. }
  1129. desc->major = MAJOR(rdev->dev);
  1130. desc->minor = MINOR(rdev->dev);
  1131. desc = &rdev->sb->this_disk;
  1132. desc->major = MAJOR(rdev->dev);
  1133. desc->minor = MINOR(rdev->dev);
  1134. }
  1135. }
  1136. /*
  1137.  * Remove unavailable and faulty devices ...
  1138.  *
  1139.  * note that if an array becomes completely unrunnable due to
  1140.  * missing devices, we do not write the superblock back, so the
  1141.  * administrator has a chance to fix things up. The removal thus
  1142.  * only happens if it's nonfatal to the contents of the array.
  1143.  */
  1144. for (i = 0; i < MD_SB_DISKS; i++) {
  1145. int found;
  1146. mdp_disk_t *desc;
  1147. kdev_t dev;
  1148. desc = sb->disks + i;
  1149. dev = MKDEV(desc->major, desc->minor);
  1150. /*
  1151.  * We kick faulty devices/descriptors immediately.
  1152.  *
  1153.  * Note: multipath devices are a special case.  Since we
  1154.  * were able to read the superblock on the path, we don't
  1155.  * care if it was previously marked as faulty, it's up now
  1156.  * so enable it.
  1157.  */
  1158. if (disk_faulty(desc) && mddev->sb->level != -4) {
  1159. found = 0;
  1160. ITERATE_RDEV(mddev,rdev,tmp) {
  1161. if (rdev->desc_nr != desc->number)
  1162. continue;
  1163. printk(KERN_WARNING "md%d: kicking faulty %s!n",
  1164. mdidx(mddev),partition_name(rdev->dev));
  1165. kick_rdev_from_array(rdev);
  1166. found = 1;
  1167. break;
  1168. }
  1169. if (!found) {
  1170. if (dev == MKDEV(0,0))
  1171. continue;
  1172. printk(KERN_WARNING "md%d: removing former faulty %s!n",
  1173. mdidx(mddev), partition_name(dev));
  1174. }
  1175. remove_descriptor(desc, sb);
  1176. continue;
  1177. } else if (disk_faulty(desc)) {
  1178. /*
  1179.  * multipath entry marked as faulty, unfaulty it
  1180.  */
  1181. rdev = find_rdev(mddev, dev);
  1182. if(rdev)
  1183. mark_disk_spare(desc);
  1184. else
  1185. remove_descriptor(desc, sb);
  1186. }
  1187. if (dev == MKDEV(0,0))
  1188. continue;
  1189. /*
  1190.  * Is this device present in the rdev ring?
  1191.  */
  1192. found = 0;
  1193. ITERATE_RDEV(mddev,rdev,tmp) {
  1194. /*
  1195.  * Multi-path IO special-case: since we have no
  1196.  * this_disk descriptor at auto-detect time,
  1197.  * we cannot check rdev->number.
  1198.  * We can check the device though.
  1199.  */
  1200. if ((sb->level == -4) && (rdev->dev ==
  1201. MKDEV(desc->major,desc->minor))) {
  1202. found = 1;
  1203. break;
  1204. }
  1205. if (rdev->desc_nr == desc->number) {
  1206. found = 1;
  1207. break;
  1208. }
  1209. }
  1210. if (found)
  1211. continue;
  1212. printk(KERN_WARNING "md%d: former device %s is unavailable, removing from array!n",
  1213.        mdidx(mddev), partition_name(dev));
  1214. remove_descriptor(desc, sb);
  1215. }
  1216. /*
  1217.  * Double check wether all devices mentioned in the
  1218.  * superblock are in the rdev ring.
  1219.  */
  1220. first = 1;
  1221. for (i = 0; i < MD_SB_DISKS; i++) {
  1222. mdp_disk_t *desc;
  1223. kdev_t dev;
  1224. desc = sb->disks + i;
  1225. dev = MKDEV(desc->major, desc->minor);
  1226. if (dev == MKDEV(0,0))
  1227. continue;
  1228. if (disk_faulty(desc)) {
  1229. MD_BUG();
  1230. goto abort;
  1231. }
  1232. rdev = find_rdev(mddev, dev);
  1233. if (!rdev) {
  1234. MD_BUG();
  1235. goto abort;
  1236. }
  1237. /*
  1238.  * In the case of Multipath-IO, we have no
  1239.  * other information source to find out which
  1240.  * disk is which, only the position of the device
  1241.  * in the superblock:
  1242.  */
  1243. if (mddev->sb->level == -4) {
  1244. if ((rdev->desc_nr != -1) && (rdev->desc_nr != i)) {
  1245. MD_BUG();
  1246. goto abort;
  1247. }
  1248. rdev->desc_nr = i;
  1249. if (!first)
  1250. rdev->alias_device = 1;
  1251. else
  1252. first = 0;
  1253. }
  1254. }
  1255. /*
  1256.  * Kick all rdevs that are not in the
  1257.  * descriptor array:
  1258.  */
  1259. ITERATE_RDEV(mddev,rdev,tmp) {
  1260. if (rdev->desc_nr == -1)
  1261. kick_rdev_from_array(rdev);
  1262. }
  1263. /*
  1264.  * Do a final reality check.
  1265.  */
  1266. if (mddev->sb->level != -4) {
  1267. ITERATE_RDEV(mddev,rdev,tmp) {
  1268. if (rdev->desc_nr == -1) {
  1269. MD_BUG();
  1270. goto abort;
  1271. }
  1272. /*
  1273.  * is the desc_nr unique?
  1274.  */
  1275. ITERATE_RDEV(mddev,rdev2,tmp2) {
  1276. if ((rdev2 != rdev) &&
  1277. (rdev2->desc_nr == rdev->desc_nr)) {
  1278. MD_BUG();
  1279. goto abort;
  1280. }
  1281. }
  1282. /*
  1283.  * is the device unique?
  1284.  */
  1285. ITERATE_RDEV(mddev,rdev2,tmp2) {
  1286. if ((rdev2 != rdev) &&
  1287. (rdev2->dev == rdev->dev)) {
  1288. MD_BUG();
  1289. goto abort;
  1290. }
  1291. }
  1292. }
  1293. }
  1294. /*
  1295.  * Check if we can support this RAID array
  1296.  */
  1297. if (sb->major_version != MD_MAJOR_VERSION ||
  1298. sb->minor_version > MD_MINOR_VERSION) {
  1299. printk(OLD_VERSION, mdidx(mddev), sb->major_version,
  1300. sb->minor_version, sb->patch_version);
  1301. goto abort;
  1302. }
  1303. if ((sb->state != (1 << MD_SB_CLEAN)) && ((sb->level == 1) ||
  1304. (sb->level == 4) || (sb->level == 5)))
  1305. printk(NOT_CLEAN_IGNORE, mdidx(mddev));
  1306. return 0;
  1307. abort:
  1308. return 1;
  1309. }
  1310. #undef INCONSISTENT
  1311. #undef OUT_OF_DATE
  1312. #undef OLD_VERSION
  1313. #undef OLD_LEVEL
  1314. static int device_size_calculation(mddev_t * mddev)
  1315. {
  1316. int data_disks = 0, persistent;
  1317. unsigned int readahead;
  1318. mdp_super_t *sb = mddev->sb;
  1319. struct md_list_head *tmp;
  1320. mdk_rdev_t *rdev;
  1321. /*
  1322.  * Do device size calculation. Bail out if too small.
  1323.  * (we have to do this after having validated chunk_size,
  1324.  * because device size has to be modulo chunk_size)
  1325.  */
  1326. persistent = !mddev->sb->not_persistent;
  1327. ITERATE_RDEV(mddev,rdev,tmp) {
  1328. if (rdev->faulty)
  1329. continue;
  1330. if (rdev->size) {
  1331. MD_BUG();
  1332. continue;
  1333. }
  1334. rdev->size = calc_dev_size(rdev->dev, mddev, persistent);
  1335. if (rdev->size < sb->chunk_size / 1024) {
  1336. printk(KERN_WARNING
  1337. "md: Dev %s smaller than chunk_size: %ldk < %dkn",
  1338. partition_name(rdev->dev),
  1339. rdev->size, sb->chunk_size / 1024);
  1340. return -EINVAL;
  1341. }
  1342. }
  1343. switch (sb->level) {
  1344. case -4:
  1345. data_disks = 1;
  1346. break;
  1347. case -3:
  1348. data_disks = 1;
  1349. break;
  1350. case -2:
  1351. data_disks = 1;
  1352. break;
  1353. case -1:
  1354. zoned_raid_size(mddev);
  1355. data_disks = 1;
  1356. break;
  1357. case 0:
  1358. zoned_raid_size(mddev);
  1359. data_disks = sb->raid_disks;
  1360. break;
  1361. case 1:
  1362. data_disks = 1;
  1363. break;
  1364. case 4:
  1365. case 5:
  1366. data_disks = sb->raid_disks-1;
  1367. break;
  1368. default:
  1369. printk(UNKNOWN_LEVEL, mdidx(mddev), sb->level);
  1370. goto abort;
  1371. }
  1372. if (!md_size[mdidx(mddev)])
  1373. md_size[mdidx(mddev)] = sb->size * data_disks;
  1374. readahead = MD_READAHEAD;
  1375. if ((sb->level == 0) || (sb->level == 4) || (sb->level == 5)) {
  1376. readahead = (mddev->sb->chunk_size>>PAGE_SHIFT) * 4 * data_disks;
  1377. if (readahead < data_disks * (MAX_SECTORS>>(PAGE_SHIFT-9))*2)
  1378. readahead = data_disks * (MAX_SECTORS>>(PAGE_SHIFT-9))*2;
  1379. } else {
  1380. // (no multipath branch - it uses the default setting)
  1381. if (sb->level == -3)
  1382. readahead = 0;
  1383. }
  1384. md_maxreadahead[mdidx(mddev)] = readahead;
  1385. printk(KERN_INFO "md%d: max total readahead window set to %ldkn",
  1386. mdidx(mddev), readahead*(PAGE_SIZE/1024));
  1387. printk(KERN_INFO
  1388. "md%d: %d data-disks, max readahead per data-disk: %ldkn",
  1389. mdidx(mddev), data_disks, readahead/data_disks*(PAGE_SIZE/1024));
  1390. return 0;
  1391. abort:
  1392. return 1;
  1393. }
  1394. #define TOO_BIG_CHUNKSIZE KERN_ERR 
  1395. "too big chunk_size: %d > %dn"
  1396. #define TOO_SMALL_CHUNKSIZE KERN_ERR 
  1397. "too small chunk_size: %d < %ldn"
  1398. #define BAD_CHUNKSIZE KERN_ERR 
  1399. "no chunksize specified, see 'man raidtab'n"
  1400. static int do_md_run(mddev_t * mddev)
  1401. {
  1402. int pnum, err;
  1403. int chunk_size;
  1404. struct md_list_head *tmp;
  1405. mdk_rdev_t *rdev;
  1406. if (!mddev->nb_dev) {
  1407. MD_BUG();
  1408. return -EINVAL;
  1409. }
  1410. if (mddev->pers)
  1411. return -EBUSY;
  1412. /*
  1413.  * Resize disks to align partitions size on a given
  1414.  * chunk size.
  1415.  */
  1416. md_size[mdidx(mddev)] = 0;
  1417. /*
  1418.  * Analyze all RAID superblock(s)
  1419.  */
  1420. if (analyze_sbs(mddev)) {
  1421. MD_BUG();
  1422. return -EINVAL;
  1423. }
  1424. chunk_size = mddev->sb->chunk_size;
  1425. pnum = level_to_pers(mddev->sb->level);
  1426. mddev->param.chunk_size = chunk_size;
  1427. mddev->param.personality = pnum;
  1428. if ((pnum != MULTIPATH) && (pnum != RAID1)) {
  1429. if (!chunk_size) {
  1430. /*
  1431.  * 'default chunksize' in the old md code used to
  1432.  * be PAGE_SIZE, baaad.
  1433.  * we abort here to be on the safe side. We dont
  1434.  * want to continue the bad practice.
  1435.  */
  1436. printk(BAD_CHUNKSIZE);
  1437. return -EINVAL;
  1438. }
  1439. if (chunk_size > MAX_CHUNK_SIZE) {
  1440. printk(TOO_BIG_CHUNKSIZE, chunk_size, MAX_CHUNK_SIZE);
  1441. return -EINVAL;
  1442. }
  1443. /*
  1444.  * chunk-size has to be a power of 2 and multiples of PAGE_SIZE
  1445.  */
  1446. if ( (1 << ffz(~chunk_size)) != chunk_size) {
  1447. MD_BUG();
  1448. return -EINVAL;
  1449. }
  1450. if (chunk_size < PAGE_SIZE) {
  1451. printk(TOO_SMALL_CHUNKSIZE, chunk_size, PAGE_SIZE);
  1452. return -EINVAL;
  1453. }
  1454. } else
  1455. if (chunk_size)
  1456. printk(KERN_INFO "md: RAID level %d does not need chunksize! Continuing anyway.n",
  1457.        mddev->sb->level);
  1458. if (pnum >= MAX_PERSONALITY) {
  1459. MD_BUG();
  1460. return -EINVAL;
  1461. }
  1462. if (!pers[pnum])
  1463. {
  1464. #ifdef CONFIG_KMOD
  1465. char module_name[80];
  1466. sprintf (module_name, "md-personality-%d", pnum);
  1467. request_module (module_name);
  1468. if (!pers[pnum])
  1469. #endif
  1470. {
  1471. printk(KERN_ERR "md: personality %d is not loaded!n",
  1472. pnum);
  1473. return -EINVAL;
  1474. }
  1475. }
  1476. if (device_size_calculation(mddev))
  1477. return -EINVAL;
  1478. /*
  1479.  * Drop all container device buffers, from now on
  1480.  * the only valid external interface is through the md
  1481.  * device.
  1482.  * Also find largest hardsector size
  1483.  */
  1484. md_hardsect_sizes[mdidx(mddev)] = 512;
  1485. ITERATE_RDEV(mddev,rdev,tmp) {
  1486. if (rdev->faulty)
  1487. continue;
  1488. invalidate_device(rdev->dev, 1);
  1489. if (get_hardsect_size(rdev->dev)
  1490. > md_hardsect_sizes[mdidx(mddev)])
  1491. md_hardsect_sizes[mdidx(mddev)] =
  1492. get_hardsect_size(rdev->dev);
  1493. }
  1494. md_blocksizes[mdidx(mddev)] = 1024;
  1495. if (md_blocksizes[mdidx(mddev)] < md_hardsect_sizes[mdidx(mddev)])
  1496. md_blocksizes[mdidx(mddev)] = md_hardsect_sizes[mdidx(mddev)];
  1497. mddev->pers = pers[pnum];
  1498. err = mddev->pers->run(mddev);
  1499. if (err) {
  1500. printk(KERN_ERR "md: pers->run() failed ...n");
  1501. mddev->pers = NULL;
  1502. return -EINVAL;
  1503. }
  1504. mddev->sb->state &= ~(1 << MD_SB_CLEAN);
  1505. mddev->sb_dirty = 1;
  1506. md_update_sb(mddev);
  1507. /*
  1508.  * md_size has units of 1K blocks, which are
  1509.  * twice as large as sectors.
  1510.  */
  1511. md_hd_struct[mdidx(mddev)].start_sect = 0;
  1512. register_disk(&md_gendisk, MKDEV(MAJOR_NR,mdidx(mddev)),
  1513. 1, &md_fops, md_size[mdidx(mddev)]<<1);
  1514. read_ahead[MD_MAJOR] = 1024;
  1515. return (0);
  1516. }
  1517. #undef TOO_BIG_CHUNKSIZE
  1518. #undef BAD_CHUNKSIZE
  1519. #define OUT(x) do { err = (x); goto out; } while (0)
  1520. static int restart_array(mddev_t *mddev)
  1521. {
  1522. int err = 0;
  1523. /*
  1524.  * Complain if it has no devices
  1525.  */
  1526. if (!mddev->nb_dev)
  1527. OUT(-ENXIO);
  1528. if (mddev->pers) {
  1529. if (!mddev->ro)
  1530. OUT(-EBUSY);
  1531. mddev->ro = 0;
  1532. set_device_ro(mddev_to_kdev(mddev), 0);
  1533. printk(KERN_INFO
  1534. "md: md%d switched to read-write mode.n", mdidx(mddev));
  1535. /*
  1536.  * Kick recovery or resync if necessary
  1537.  */
  1538. md_recover_arrays();
  1539. if (mddev->pers->restart_resync)
  1540. mddev->pers->restart_resync(mddev);
  1541. } else {
  1542. printk(KERN_ERR "md: md%d has no personality assigned.n",
  1543. mdidx(mddev));
  1544. err = -EINVAL;
  1545. }
  1546. out:
  1547. return err;
  1548. }
  1549. #define STILL_MOUNTED KERN_WARNING 
  1550. "md: md%d still mounted.n"
  1551. #define STILL_IN_USE 
  1552. "md: md%d still in use.n"
  1553. static int do_md_stop(mddev_t * mddev, int ro)
  1554. {
  1555. int err = 0, resync_interrupted = 0;
  1556. kdev_t dev = mddev_to_kdev(mddev);
  1557. if (atomic_read(&mddev->active)>1) {
  1558. printk(STILL_IN_USE, mdidx(mddev));
  1559. OUT(-EBUSY);
  1560. }
  1561. if (mddev->pers) {
  1562. /*
  1563.  * It is safe to call stop here, it only frees private
  1564.  * data. Also, it tells us if a device is unstoppable
  1565.  * (eg. resyncing is in progress)
  1566.  */
  1567. if (mddev->pers->stop_resync)
  1568. if (mddev->pers->stop_resync(mddev))
  1569. resync_interrupted = 1;
  1570. if (mddev->recovery_running)
  1571. md_interrupt_thread(md_recovery_thread);
  1572. /*
  1573.  * This synchronizes with signal delivery to the
  1574.  * resync or reconstruction thread. It also nicely
  1575.  * hangs the process if some reconstruction has not
  1576.  * finished.
  1577.  */
  1578. down(&mddev->recovery_sem);
  1579. up(&mddev->recovery_sem);
  1580. invalidate_device(dev, 1);
  1581. if (ro) {
  1582. if (mddev->ro)
  1583. OUT(-ENXIO);
  1584. mddev->ro = 1;
  1585. } else {
  1586. if (mddev->ro)
  1587. set_device_ro(dev, 0);
  1588. if (mddev->pers->stop(mddev)) {
  1589. if (mddev->ro)
  1590. set_device_ro(dev, 1);
  1591. OUT(-EBUSY);
  1592. }
  1593. if (mddev->ro)
  1594. mddev->ro = 0;
  1595. }
  1596. if (mddev->sb) {
  1597. /*
  1598.  * mark it clean only if there was no resync
  1599.  * interrupted.
  1600.  */
  1601. if (!mddev->recovery_running && !resync_interrupted) {
  1602. printk(KERN_INFO "md: marking sb clean...n");
  1603. mddev->sb->state |= 1 << MD_SB_CLEAN;
  1604. }
  1605. mddev->sb_dirty = 1;
  1606. md_update_sb(mddev);
  1607. }
  1608. if (ro)
  1609. set_device_ro(dev, 1);
  1610. }
  1611. /*
  1612.  * Free resources if final stop
  1613.  */
  1614. if (!ro) {
  1615. printk(KERN_INFO "md: md%d stopped.n", mdidx(mddev));
  1616. free_mddev(mddev);
  1617. } else
  1618. printk(KERN_INFO "md: md%d switched to read-only mode.n", mdidx(mddev));
  1619. out:
  1620. return err;
  1621. }
  1622. #undef OUT
  1623. /*
  1624.  * We have to safely support old arrays too.
  1625.  */
  1626. int detect_old_array(mdp_super_t *sb)
  1627. {
  1628. if (sb->major_version > 0)
  1629. return 0;
  1630. if (sb->minor_version >= 90)
  1631. return 0;
  1632. return -EINVAL;
  1633. }
  1634. static void autorun_array(mddev_t *mddev)
  1635. {
  1636. mdk_rdev_t *rdev;
  1637. struct md_list_head *tmp;
  1638. int err;
  1639. if (mddev->disks.prev == &mddev->disks) {
  1640. MD_BUG();
  1641. return;
  1642. }
  1643. printk(KERN_INFO "md: running: ");
  1644. ITERATE_RDEV(mddev,rdev,tmp) {
  1645. printk("<%s>", partition_name(rdev->dev));
  1646. }
  1647. printk("n");
  1648. err = do_md_run (mddev);
  1649. if (err) {
  1650. printk(KERN_WARNING "md :do_md_run() returned %dn", err);
  1651. /*
  1652.  * prevent the writeback of an unrunnable array
  1653.  */
  1654. mddev->sb_dirty = 0;
  1655. do_md_stop (mddev, 0);
  1656. }
  1657. }
  1658. /*
  1659.  * lets try to run arrays based on all disks that have arrived
  1660.  * until now. (those are in the ->pending list)
  1661.  *
  1662.  * the method: pick the first pending disk, collect all disks with
  1663.  * the same UUID, remove all from the pending list and put them into
  1664.  * the 'same_array' list. Then order this list based on superblock
  1665.  * update time (freshest comes first), kick out 'old' disks and
  1666.  * compare superblocks. If everything's fine then run it.
  1667.  *
  1668.  * If "unit" is allocated, then bump its reference count
  1669.  */
  1670. static void autorun_devices(kdev_t countdev)
  1671. {
  1672. struct md_list_head candidates;
  1673. struct md_list_head *tmp;
  1674. mdk_rdev_t *rdev0, *rdev;
  1675. mddev_t *mddev;
  1676. kdev_t md_kdev;
  1677. printk(KERN_INFO "md: autorun ...n");
  1678. while (pending_raid_disks.next != &pending_raid_disks) {
  1679. rdev0 = md_list_entry(pending_raid_disks.next,
  1680.  mdk_rdev_t, pending);
  1681. printk(KERN_INFO "md: considering %s ...n", partition_name(rdev0->dev));
  1682. MD_INIT_LIST_HEAD(&candidates);
  1683. ITERATE_RDEV_PENDING(rdev,tmp) {
  1684. if (uuid_equal(rdev0, rdev)) {
  1685. if (!sb_equal(rdev0->sb, rdev->sb)) {
  1686. printk(KERN_WARNING
  1687.        "md: %s has same UUID as %s, but superblocks differ ...n",
  1688.        partition_name(rdev->dev), partition_name(rdev0->dev));
  1689. continue;
  1690. }
  1691. printk(KERN_INFO "md:  adding %s ...n", partition_name(rdev->dev));
  1692. md_list_del(&rdev->pending);
  1693. md_list_add(&rdev->pending, &candidates);
  1694. }
  1695. }
  1696. /*
  1697.  * now we have a set of devices, with all of them having
  1698.  * mostly sane superblocks. It's time to allocate the
  1699.  * mddev.
  1700.  */
  1701. md_kdev = MKDEV(MD_MAJOR, rdev0->sb->md_minor);
  1702. mddev = kdev_to_mddev(md_kdev);
  1703. if (mddev) {
  1704. printk(KERN_WARNING "md: md%d already running, cannot run %sn",
  1705.        mdidx(mddev), partition_name(rdev0->dev));
  1706. ITERATE_RDEV_GENERIC(candidates,pending,rdev,tmp)
  1707. export_rdev(rdev);
  1708. continue;
  1709. }
  1710. mddev = alloc_mddev(md_kdev);
  1711. if (!mddev) {
  1712. printk(KERN_ERR "md: cannot allocate memory for md drive.n");
  1713. break;
  1714. }
  1715. if (md_kdev == countdev)
  1716. atomic_inc(&mddev->active);
  1717. printk(KERN_INFO "md: created md%dn", mdidx(mddev));
  1718. ITERATE_RDEV_GENERIC(candidates,pending,rdev,tmp) {
  1719. bind_rdev_to_array(rdev, mddev);
  1720. md_list_del(&rdev->pending);
  1721. MD_INIT_LIST_HEAD(&rdev->pending);
  1722. }
  1723. autorun_array(mddev);
  1724. }
  1725. printk(KERN_INFO "md: ... autorun DONE.n");
  1726. }
  1727. /*
  1728.  * import RAID devices based on one partition
  1729.  * if possible, the array gets run as well.
  1730.  */
  1731. #define BAD_VERSION KERN_ERR 
  1732. "md: %s has RAID superblock version 0.%d, autodetect needs v0.90 or highern"
  1733. #define OUT_OF_MEM KERN_ALERT 
  1734. "md: out of memory.n"
  1735. #define NO_DEVICE KERN_ERR 
  1736. "md: disabled device %sn"
  1737. #define AUTOADD_FAILED KERN_ERR 
  1738. "md: auto-adding devices to md%d FAILED (error %d).n"
  1739. #define AUTOADD_FAILED_USED KERN_ERR 
  1740. "md: cannot auto-add device %s to md%d, already used.n"
  1741. #define AUTORUN_FAILED KERN_ERR 
  1742. "md: auto-running md%d FAILED (error %d).n"
  1743. #define MDDEV_BUSY KERN_ERR 
  1744. "md: cannot auto-add to md%d, already running.n"
  1745. #define AUTOADDING KERN_INFO 
  1746. "md: auto-adding devices to md%d, based on %s's superblock.n"
  1747. #define AUTORUNNING KERN_INFO 
  1748. "md: auto-running md%d.n"
  1749. static int autostart_array(kdev_t startdev, kdev_t countdev)
  1750. {
  1751. int err = -EINVAL, i;
  1752. mdp_super_t *sb = NULL;
  1753. mdk_rdev_t *start_rdev = NULL, *rdev;
  1754. if (md_import_device(startdev, 1)) {
  1755. printk(KERN_WARNING "md: could not import %s!n", partition_name(startdev));
  1756. goto abort;
  1757. }
  1758. start_rdev = find_rdev_all(startdev);
  1759. if (!start_rdev) {
  1760. MD_BUG();
  1761. goto abort;
  1762. }
  1763. if (start_rdev->faulty) {
  1764. printk(KERN_WARNING "md: can not autostart based on faulty %s!n",
  1765. partition_name(startdev));
  1766. goto abort;
  1767. }
  1768. md_list_add(&start_rdev->pending, &pending_raid_disks);
  1769. sb = start_rdev->sb;
  1770. err = detect_old_array(sb);
  1771. if (err) {
  1772. printk(KERN_WARNING "md: array version is too old to be autostarted ,"
  1773.        "use raidtools 0.90 mkraid --upgrade to upgrade the array "
  1774.        "without data loss!n");
  1775. goto abort;
  1776. }
  1777. for (i = 0; i < MD_SB_DISKS; i++) {
  1778. mdp_disk_t *desc;
  1779. kdev_t dev;
  1780. desc = sb->disks + i;
  1781. dev = MKDEV(desc->major, desc->minor);
  1782. if (dev == MKDEV(0,0))
  1783. continue;
  1784. if (dev == startdev)
  1785. continue;
  1786. if (md_import_device(dev, 1)) {
  1787. printk(KERN_WARNING "md: could not import %s, trying to run array nevertheless.n",
  1788.        partition_name(dev));
  1789. continue;
  1790. }
  1791. rdev = find_rdev_all(dev);
  1792. if (!rdev) {
  1793. MD_BUG();
  1794. goto abort;
  1795. }
  1796. md_list_add(&rdev->pending, &pending_raid_disks);
  1797. }
  1798. /*
  1799.  * possibly return codes
  1800.  */
  1801. autorun_devices(countdev);
  1802. return 0;
  1803. abort:
  1804. if (start_rdev)
  1805. export_rdev(start_rdev);
  1806. return err;
  1807. }
  1808. #undef BAD_VERSION
  1809. #undef OUT_OF_MEM
  1810. #undef NO_DEVICE
  1811. #undef AUTOADD_FAILED_USED
  1812. #undef AUTOADD_FAILED
  1813. #undef AUTORUN_FAILED
  1814. #undef AUTOADDING
  1815. #undef AUTORUNNING
  1816. static int get_version(void * arg)
  1817. {
  1818. mdu_version_t ver;
  1819. ver.major = MD_MAJOR_VERSION;
  1820. ver.minor = MD_MINOR_VERSION;
  1821. ver.patchlevel = MD_PATCHLEVEL_VERSION;
  1822. if (md_copy_to_user(arg, &ver, sizeof(ver)))
  1823. return -EFAULT;
  1824. return 0;
  1825. }
  1826. #define SET_FROM_SB(x) info.x = mddev->sb->x
  1827. static int get_array_info(mddev_t * mddev, void * arg)
  1828. {
  1829. mdu_array_info_t info;
  1830. if (!mddev->sb) {
  1831. MD_BUG();
  1832. return -EINVAL;
  1833. }
  1834. SET_FROM_SB(major_version);
  1835. SET_FROM_SB(minor_version);
  1836. SET_FROM_SB(patch_version);
  1837. SET_FROM_SB(ctime);
  1838. SET_FROM_SB(level);
  1839. SET_FROM_SB(size);
  1840. SET_FROM_SB(nr_disks);
  1841. SET_FROM_SB(raid_disks);
  1842. SET_FROM_SB(md_minor);
  1843. SET_FROM_SB(not_persistent);
  1844. SET_FROM_SB(utime);
  1845. SET_FROM_SB(state);
  1846. SET_FROM_SB(active_disks);
  1847. SET_FROM_SB(working_disks);
  1848. SET_FROM_SB(failed_disks);
  1849. SET_FROM_SB(spare_disks);
  1850. SET_FROM_SB(layout);
  1851. SET_FROM_SB(chunk_size);
  1852. if (md_copy_to_user(arg, &info, sizeof(info)))
  1853. return -EFAULT;
  1854. return 0;
  1855. }
  1856. #undef SET_FROM_SB
  1857. #define SET_FROM_SB(x) info.x = mddev->sb->disks[nr].x
  1858. static int get_disk_info(mddev_t * mddev, void * arg)
  1859. {
  1860. mdu_disk_info_t info;
  1861. unsigned int nr;
  1862. if (!mddev->sb)
  1863. return -EINVAL;
  1864. if (md_copy_from_user(&info, arg, sizeof(info)))
  1865. return -EFAULT;
  1866. nr = info.number;
  1867. if (nr >= MD_SB_DISKS)
  1868. return -EINVAL;
  1869. SET_FROM_SB(major);
  1870. SET_FROM_SB(minor);
  1871. SET_FROM_SB(raid_disk);
  1872. SET_FROM_SB(state);
  1873. if (md_copy_to_user(arg, &info, sizeof(info)))
  1874. return -EFAULT;
  1875. return 0;
  1876. }
  1877. #undef SET_FROM_SB
  1878. #define SET_SB(x) mddev->sb->disks[nr].x = info->x
  1879. static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
  1880. {
  1881. int err, size, persistent;
  1882. mdk_rdev_t *rdev;
  1883. unsigned int nr;
  1884. kdev_t dev;
  1885. dev = MKDEV(info->major,info->minor);
  1886. if (find_rdev_all(dev)) {
  1887. printk(KERN_WARNING "md: device %s already used in a RAID array!n",
  1888.        partition_name(dev));
  1889. return -EBUSY;
  1890. }
  1891. if (!mddev->sb) {
  1892. /* expecting a device which has a superblock */
  1893. err = md_import_device(dev, 1);
  1894. if (err) {
  1895. printk(KERN_WARNING "md: md_import_device returned %dn", err);
  1896. return -EINVAL;
  1897. }
  1898. rdev = find_rdev_all(dev);
  1899. if (!rdev) {
  1900. MD_BUG();
  1901. return -EINVAL;
  1902. }
  1903. if (mddev->nb_dev) {
  1904. mdk_rdev_t *rdev0 = md_list_entry(mddev->disks.next,
  1905. mdk_rdev_t, same_set);
  1906. if (!uuid_equal(rdev0, rdev)) {
  1907. printk(KERN_WARNING "md: %s has different UUID to %sn",
  1908.        partition_name(rdev->dev), partition_name(rdev0->dev));
  1909. export_rdev(rdev);
  1910. return -EINVAL;
  1911. }
  1912. if (!sb_equal(rdev0->sb, rdev->sb)) {
  1913. printk(KERN_WARNING "md: %s has same UUID but different superblock to %sn",
  1914.        partition_name(rdev->dev), partition_name(rdev0->dev));
  1915. export_rdev(rdev);
  1916. return -EINVAL;
  1917. }
  1918. }
  1919. bind_rdev_to_array(rdev, mddev);
  1920. return 0;
  1921. }
  1922. nr = info->number;
  1923. if (nr >= mddev->sb->nr_disks) {
  1924. MD_BUG();
  1925. return -EINVAL;
  1926. }
  1927. SET_SB(number);
  1928. SET_SB(major);
  1929. SET_SB(minor);
  1930. SET_SB(raid_disk);
  1931. SET_SB(state);
  1932. if ((info->state & (1<<MD_DISK_FAULTY))==0) {
  1933. err = md_import_device (dev, 0);
  1934. if (err) {
  1935. printk(KERN_WARNING "md: error, md_import_device() returned %dn", err);
  1936. return -EINVAL;
  1937. }
  1938. rdev = find_rdev_all(dev);
  1939. if (!rdev) {
  1940. MD_BUG();
  1941. return -EINVAL;
  1942. }
  1943. rdev->old_dev = dev;
  1944. rdev->desc_nr = info->number;
  1945. bind_rdev_to_array(rdev, mddev);
  1946. persistent = !mddev->sb->not_persistent;
  1947. if (!persistent)
  1948. printk(KERN_INFO "md: nonpersistent superblock ...n");
  1949. size = calc_dev_size(dev, mddev, persistent);
  1950. rdev->sb_offset = calc_dev_sboffset(dev, mddev, persistent);
  1951. if (!mddev->sb->size || (mddev->sb->size > size))
  1952. mddev->sb->size = size;
  1953. }
  1954. /*
  1955.  * sync all other superblocks with the main superblock
  1956.  */
  1957. sync_sbs(mddev);
  1958. return 0;
  1959. }
  1960. #undef SET_SB
  1961. static int hot_generate_error(mddev_t * mddev, kdev_t dev)
  1962. {
  1963. struct request_queue *q;
  1964. mdk_rdev_t *rdev;
  1965. mdp_disk_t *disk;
  1966. if (!mddev->pers)
  1967. return -ENODEV;
  1968. printk(KERN_INFO "md: trying to generate %s error in md%d ... n",
  1969. partition_name(dev), mdidx(mddev));
  1970. rdev = find_rdev(mddev, dev);
  1971. if (!rdev) {
  1972. MD_BUG();
  1973. return -ENXIO;
  1974. }
  1975. if (rdev->desc_nr == -1) {
  1976. MD_BUG();
  1977. return -EINVAL;
  1978. }
  1979. disk = &mddev->sb->disks[rdev->desc_nr];
  1980. if (!disk_active(disk))
  1981. return -ENODEV;
  1982. q = blk_get_queue(rdev->dev);
  1983. if (!q) {
  1984. MD_BUG();
  1985. return -ENODEV;
  1986. }
  1987. printk(KERN_INFO "md: okay, generating error!n");
  1988. // q->oneshot_error = 1; // disabled for now
  1989. return 0;
  1990. }
  1991. static int hot_remove_disk(mddev_t * mddev, kdev_t dev)
  1992. {
  1993. int err;
  1994. mdk_rdev_t *rdev;
  1995. mdp_disk_t *disk;
  1996. if (!mddev->pers)
  1997. return -ENODEV;
  1998. printk(KERN_INFO "md: trying to remove %s from md%d ... n",
  1999. partition_name(dev), mdidx(mddev));
  2000. if (!mddev->pers->diskop) {
  2001. printk(KERN_WARNING "md%d: personality does not support diskops!n",
  2002.        mdidx(mddev));
  2003. return -EINVAL;
  2004. }
  2005. rdev = find_rdev(mddev, dev);
  2006. if (!rdev)
  2007. return -ENXIO;
  2008. if (rdev->desc_nr == -1) {
  2009. MD_BUG();
  2010. return -EINVAL;
  2011. }
  2012. disk = &mddev->sb->disks[rdev->desc_nr];
  2013. if (disk_active(disk)) {
  2014. MD_BUG();
  2015. goto busy;
  2016. }
  2017. if (disk_removed(disk)) {
  2018. MD_BUG();
  2019. return -EINVAL;
  2020. }
  2021. err = mddev->pers->diskop(mddev, &disk, DISKOP_HOT_REMOVE_DISK);
  2022. if (err == -EBUSY) {
  2023. MD_BUG();
  2024. goto busy;
  2025. }
  2026. if (err) {
  2027. MD_BUG();
  2028. return -EINVAL;
  2029. }
  2030. remove_descriptor(disk, mddev->sb);
  2031. kick_rdev_from_array(rdev);
  2032. mddev->sb_dirty = 1;
  2033. md_update_sb(mddev);
  2034. return 0;
  2035. busy:
  2036. printk(KERN_WARNING "md: cannot remove active disk %s from md%d ... n",
  2037. partition_name(dev), mdidx(mddev));
  2038. return -EBUSY;
  2039. }
  2040. static int hot_add_disk(mddev_t * mddev, kdev_t dev)
  2041. {
  2042. int i, err, persistent;
  2043. unsigned int size;
  2044. mdk_rdev_t *rdev;
  2045. mdp_disk_t *disk;
  2046. if (!mddev->pers)
  2047. return -ENODEV;
  2048. printk(KERN_INFO "md: trying to hot-add %s to md%d ... n",
  2049. partition_name(dev), mdidx(mddev));
  2050. if (!mddev->pers->diskop) {
  2051. printk(KERN_WARNING "md%d: personality does not support diskops!n",
  2052.        mdidx(mddev));
  2053. return -EINVAL;
  2054. }
  2055. persistent = !mddev->sb->not_persistent;
  2056. size = calc_dev_size(dev, mddev, persistent);
  2057. if (size < mddev->sb->size) {
  2058. printk(KERN_WARNING "md%d: disk size %d blocks < array size %dn",
  2059. mdidx(mddev), size, mddev->sb->size);
  2060. return -ENOSPC;
  2061. }
  2062. rdev = find_rdev(mddev, dev);
  2063. if (rdev)
  2064. return -EBUSY;
  2065. err = md_import_device (dev, 0);
  2066. if (err) {
  2067. printk(KERN_WARNING "md: error, md_import_device() returned %dn", err);
  2068. return -EINVAL;
  2069. }
  2070. rdev = find_rdev_all(dev);
  2071. if (!rdev) {
  2072. MD_BUG();
  2073. return -EINVAL;
  2074. }
  2075. if (rdev->faulty) {
  2076. printk(KERN_WARNING "md: can not hot-add faulty %s disk to md%d!n",
  2077. partition_name(dev), mdidx(mddev));
  2078. err = -EINVAL;
  2079. goto abort_export;
  2080. }
  2081. bind_rdev_to_array(rdev, mddev);
  2082. /*
  2083.  * The rest should better be atomic, we can have disk failures
  2084.  * noticed in interrupt contexts ...
  2085.  */
  2086. rdev->old_dev = dev;
  2087. rdev->size = size;
  2088. rdev->sb_offset = calc_dev_sboffset(dev, mddev, persistent);
  2089. disk = mddev->sb->disks + mddev->sb->raid_disks;
  2090. for (i = mddev->sb->raid_disks; i < MD_SB_DISKS; i++) {
  2091. disk = mddev->sb->disks + i;
  2092. if (!disk->major && !disk->minor)
  2093. break;
  2094. if (disk_removed(disk))
  2095. break;
  2096. }
  2097. if (i == MD_SB_DISKS) {
  2098. printk(KERN_WARNING "md%d: can not hot-add to full array!n",
  2099.        mdidx(mddev));
  2100. err = -EBUSY;
  2101. goto abort_unbind_export;
  2102. }
  2103. if (disk_removed(disk)) {
  2104. /*
  2105.  * reuse slot
  2106.  */
  2107. if (disk->number != i) {
  2108. MD_BUG();
  2109. err = -EINVAL;
  2110. goto abort_unbind_export;
  2111. }
  2112. } else {
  2113. disk->number = i;
  2114. }
  2115. disk->raid_disk = disk->number;
  2116. disk->major = MAJOR(dev);
  2117. disk->minor = MINOR(dev);
  2118. if (mddev->pers->diskop(mddev, &disk, DISKOP_HOT_ADD_DISK)) {
  2119. MD_BUG();
  2120. err = -EINVAL;
  2121. goto abort_unbind_export;
  2122. }
  2123. mark_disk_spare(disk);
  2124. mddev->sb->nr_disks++;
  2125. mddev->sb->spare_disks++;
  2126. mddev->sb->working_disks++;
  2127. mddev->sb_dirty = 1;
  2128. md_update_sb(mddev);
  2129. /*
  2130.  * Kick recovery, maybe this spare has to be added to the
  2131.  * array immediately.
  2132.  */
  2133. md_recover_arrays();
  2134. return 0;
  2135. abort_unbind_export:
  2136. unbind_rdev_from_array(rdev);
  2137. abort_export:
  2138. export_rdev(rdev);
  2139. return err;
  2140. }
  2141. #define SET_SB(x) mddev->sb->x = info->x
  2142. static int set_array_info(mddev_t * mddev, mdu_array_info_t *info)
  2143. {
  2144. if (alloc_array_sb(mddev))
  2145. return -ENOMEM;
  2146. mddev->sb->major_version = MD_MAJOR_VERSION;
  2147. mddev->sb->minor_version = MD_MINOR_VERSION;
  2148. mddev->sb->patch_version = MD_PATCHLEVEL_VERSION;
  2149. mddev->sb->ctime = CURRENT_TIME;
  2150. SET_SB(level);
  2151. SET_SB(size);
  2152. SET_SB(nr_disks);
  2153. SET_SB(raid_disks);
  2154. SET_SB(md_minor);
  2155. SET_SB(not_persistent);
  2156. SET_SB(state);
  2157. SET_SB(active_disks);
  2158. SET_SB(working_disks);
  2159. SET_SB(failed_disks);
  2160. SET_SB(spare_disks);
  2161. SET_SB(layout);
  2162. SET_SB(chunk_size);
  2163. mddev->sb->md_magic = MD_SB_MAGIC;
  2164. /*
  2165.  * Generate a 128 bit UUID
  2166.  */
  2167. get_random_bytes(&mddev->sb->set_uuid0, 4);
  2168. get_random_bytes(&mddev->sb->set_uuid1, 4);
  2169. get_random_bytes(&mddev->sb->set_uuid2, 4);
  2170. get_random_bytes(&mddev->sb->set_uuid3, 4);
  2171. return 0;
  2172. }
  2173. #undef SET_SB
  2174. static int set_disk_info(mddev_t * mddev, void * arg)
  2175. {
  2176. printk(KERN_INFO "md: not yet");
  2177. return -EINVAL;
  2178. }
  2179. static int clear_array(mddev_t * mddev)
  2180. {
  2181. printk(KERN_INFO "md: not yet");
  2182. return -EINVAL;
  2183. }
  2184. static int write_raid_info(mddev_t * mddev)
  2185. {
  2186. printk(KERN_INFO "md: not yet");
  2187. return -EINVAL;
  2188. }
  2189. static int protect_array(mddev_t * mddev)
  2190. {
  2191. printk(KERN_INFO "md: not yet");
  2192. return -EINVAL;
  2193. }
  2194. static int unprotect_array(mddev_t * mddev)
  2195. {
  2196. printk(KERN_INFO "md: not yet");
  2197. return -EINVAL;
  2198. }
  2199. static int set_disk_faulty(mddev_t *mddev, kdev_t dev)
  2200. {
  2201. int ret;
  2202. ret = md_error(mddev, dev);
  2203. return ret;
  2204. }
  2205. static int md_ioctl(struct inode *inode, struct file *file,
  2206. unsigned int cmd, unsigned long arg)
  2207. {
  2208. unsigned int minor;
  2209. int err = 0;
  2210. struct hd_geometry *loc = (struct hd_geometry *) arg;
  2211. mddev_t *mddev = NULL;
  2212. kdev_t dev;
  2213. if (!md_capable_admin())
  2214. return -EACCES;
  2215. dev = inode->i_rdev;
  2216. minor = MINOR(dev);
  2217. if (minor >= MAX_MD_DEVS) {
  2218. MD_BUG();
  2219. return -EINVAL;
  2220. }
  2221. /*
  2222.  * Commands dealing with the RAID driver but not any
  2223.  * particular array:
  2224.  */
  2225. switch (cmd)
  2226. {
  2227. case RAID_VERSION:
  2228. err = get_version((void *)arg);
  2229. goto done;
  2230. case PRINT_RAID_DEBUG:
  2231. err = 0;
  2232. md_print_devices();
  2233. goto done_unlock;
  2234. #ifndef MODULE
  2235. case RAID_AUTORUN:
  2236. err = 0;
  2237. autostart_arrays();
  2238. goto done;
  2239. #endif
  2240. case BLKGETSIZE: /* Return device size */
  2241. if (!arg) {
  2242. err = -EINVAL;
  2243. MD_BUG();
  2244. goto abort;
  2245. }
  2246. err = md_put_user(md_hd_struct[minor].nr_sects,
  2247. (unsigned long *) arg);
  2248. goto done;
  2249. case BLKGETSIZE64: /* Return device size */
  2250. err = md_put_user((u64)md_hd_struct[minor].nr_sects << 9,
  2251. (u64 *) arg);
  2252. goto done;
  2253. case BLKRAGET:
  2254. case BLKRASET:
  2255. case BLKFLSBUF:
  2256. case BLKBSZGET:
  2257. case BLKBSZSET:
  2258. err = blk_ioctl (dev, cmd, arg);
  2259. goto abort;
  2260. default:;
  2261. }
  2262. /*
  2263.  * Commands creating/starting a new array:
  2264.  */
  2265. mddev = kdev_to_mddev(dev);
  2266. switch (cmd)
  2267. {
  2268. case SET_ARRAY_INFO:
  2269. case START_ARRAY:
  2270. if (mddev) {
  2271. printk(KERN_WARNING "md: array md%d already exists!n",
  2272. mdidx(mddev));
  2273. err = -EEXIST;
  2274. goto abort;
  2275. }
  2276. default:;
  2277. }
  2278. switch (cmd)
  2279. {
  2280. case SET_ARRAY_INFO:
  2281. mddev = alloc_mddev(dev);
  2282. if (!mddev) {
  2283. err = -ENOMEM;
  2284. goto abort;
  2285. }
  2286. atomic_inc(&mddev->active);
  2287. /*
  2288.  * alloc_mddev() should possibly self-lock.
  2289.  */
  2290. err = lock_mddev(mddev);
  2291. if (err) {
  2292. printk(KERN_WARNING "md: ioctl, reason %d, cmd %dn",
  2293.        err, cmd);
  2294. goto abort;
  2295. }
  2296. if (mddev->sb) {
  2297. printk(KERN_WARNING "md: array md%d already has a superblock!n",
  2298. mdidx(mddev));
  2299. err = -EBUSY;
  2300. goto abort_unlock;
  2301. }
  2302. if (arg) {
  2303. mdu_array_info_t info;
  2304. if (md_copy_from_user(&info, (void*)arg, sizeof(info))) {
  2305. err = -EFAULT;
  2306. goto abort_unlock;
  2307. }
  2308. err = set_array_info(mddev, &info);
  2309. if (err) {
  2310. printk(KERN_WARNING "md: couldnt set array info. %dn", err);
  2311. goto abort_unlock;
  2312. }
  2313. }
  2314. goto done_unlock;
  2315. case START_ARRAY:
  2316. /*
  2317.  * possibly make it lock the array ...
  2318.  */
  2319. err = autostart_array((kdev_t)arg, dev);
  2320. if (err) {
  2321. printk(KERN_WARNING "md: autostart %s failed!n",
  2322. partition_name((kdev_t)arg));
  2323. goto abort;
  2324. }
  2325. goto done;
  2326. default:;
  2327. }
  2328. /*
  2329.  * Commands querying/configuring an existing array:
  2330.  */
  2331. if (!mddev) {
  2332. err = -ENODEV;
  2333. goto abort;
  2334. }
  2335. err = lock_mddev(mddev);
  2336. if (err) {
  2337. printk(KERN_INFO "md: ioctl lock interrupted, reason %d, cmd %dn",err, cmd);
  2338. goto abort;
  2339. }
  2340. /* if we don't have a superblock yet, only ADD_NEW_DISK or STOP_ARRAY is allowed */
  2341. if (!mddev->sb && cmd != ADD_NEW_DISK && cmd != STOP_ARRAY && cmd != RUN_ARRAY) {
  2342. err = -ENODEV;
  2343. goto abort_unlock;
  2344. }
  2345. /*
  2346.  * Commands even a read-only array can execute:
  2347.  */
  2348. switch (cmd)
  2349. {
  2350. case GET_ARRAY_INFO:
  2351. err = get_array_info(mddev, (void *)arg);
  2352. goto done_unlock;
  2353. case GET_DISK_INFO:
  2354. err = get_disk_info(mddev, (void *)arg);
  2355. goto done_unlock;
  2356. case RESTART_ARRAY_RW:
  2357. err = restart_array(mddev);
  2358. goto done_unlock;
  2359. case STOP_ARRAY:
  2360. if (!(err = do_md_stop (mddev, 0)))
  2361. mddev = NULL;
  2362. goto done_unlock;
  2363. case STOP_ARRAY_RO:
  2364. err = do_md_stop (mddev, 1);
  2365. goto done_unlock;
  2366. /*
  2367.  * We have a problem here : there is no easy way to give a CHS
  2368.  * virtual geometry. We currently pretend that we have a 2 heads
  2369.  * 4 sectors (with a BIG number of cylinders...). This drives
  2370.  * dosfs just mad... ;-)
  2371.  */
  2372. case HDIO_GETGEO:
  2373. if (!loc) {
  2374. err = -EINVAL;
  2375. goto abort_unlock;
  2376. }
  2377. err = md_put_user (2, (char *) &loc->heads);
  2378. if (err)
  2379. goto abort_unlock;
  2380. err = md_put_user (4, (char *) &loc->sectors);
  2381. if (err)
  2382. goto abort_unlock;
  2383. err = md_put_user (md_hd_struct[mdidx(mddev)].nr_sects/8,
  2384. (short *) &loc->cylinders);
  2385. if (err)
  2386. goto abort_unlock;
  2387. err = md_put_user (md_hd_struct[minor].start_sect,
  2388. (long *) &loc->start);
  2389. goto done_unlock;
  2390. }
  2391. /*
  2392.  * The remaining ioctls are changing the state of the
  2393.  * superblock, so we do not allow read-only arrays
  2394.  * here:
  2395.  */
  2396. if (mddev->ro) {
  2397. err = -EROFS;
  2398. goto abort_unlock;
  2399. }
  2400. switch (cmd)
  2401. {
  2402. case CLEAR_ARRAY:
  2403. err = clear_array(mddev);
  2404. goto done_unlock;
  2405. case ADD_NEW_DISK:
  2406. {
  2407. mdu_disk_info_t info;
  2408. if (md_copy_from_user(&info, (void*)arg, sizeof(info)))
  2409. err = -EFAULT;
  2410. else
  2411. err = add_new_disk(mddev, &info);
  2412. goto done_unlock;
  2413. }
  2414. case HOT_GENERATE_ERROR:
  2415. err = hot_generate_error(mddev, (kdev_t)arg);
  2416. goto done_unlock;
  2417. case HOT_REMOVE_DISK:
  2418. err = hot_remove_disk(mddev, (kdev_t)arg);
  2419. goto done_unlock;
  2420. case HOT_ADD_DISK:
  2421. err = hot_add_disk(mddev, (kdev_t)arg);
  2422. goto done_unlock;
  2423. case SET_DISK_INFO:
  2424. err = set_disk_info(mddev, (void *)arg);
  2425. goto done_unlock;
  2426. case WRITE_RAID_INFO:
  2427. err = write_raid_info(mddev);
  2428. goto done_unlock;
  2429. case UNPROTECT_ARRAY:
  2430. err = unprotect_array(mddev);
  2431. goto done_unlock;
  2432. case PROTECT_ARRAY:
  2433. err = protect_array(mddev);
  2434. goto done_unlock;
  2435. case SET_DISK_FAULTY:
  2436. err = set_disk_faulty(mddev, (kdev_t)arg);
  2437. goto done_unlock;
  2438. case RUN_ARRAY:
  2439. {
  2440. /* The data is never used....
  2441. mdu_param_t param;
  2442. err = md_copy_from_user(&param, (mdu_param_t *)arg,
  2443.  sizeof(param));
  2444. if (err)
  2445. goto abort_unlock;
  2446. */
  2447. err = do_md_run (mddev);
  2448. /*
  2449.  * we have to clean up the mess if
  2450.  * the array cannot be run for some
  2451.  * reason ...
  2452.  */
  2453. if (err) {
  2454. mddev->sb_dirty = 0;
  2455. if (!do_md_stop (mddev, 0))
  2456. mddev = NULL;
  2457. }
  2458. goto done_unlock;
  2459. }
  2460. default:
  2461. printk(KERN_WARNING "md: %s(pid %d) used obsolete MD ioctl, "
  2462.        "upgrade your software to use new ictls.n",
  2463.        current->comm, current->pid);
  2464. err = -EINVAL;
  2465. goto abort_unlock;
  2466. }
  2467. done_unlock:
  2468. abort_unlock:
  2469. if (mddev)
  2470. unlock_mddev(mddev);
  2471. return err;
  2472. done:
  2473. if (err)
  2474. MD_BUG();
  2475. abort:
  2476. return err;
  2477. }
  2478. static int md_open(struct inode *inode, struct file *file)
  2479. {
  2480. /*
  2481.  * Always succeed, but increment the usage count
  2482.  */
  2483. mddev_t *mddev = kdev_to_mddev(inode->i_rdev);
  2484. if (mddev)
  2485. atomic_inc(&mddev->active);
  2486. return (0);
  2487. }
  2488. static int md_release(struct inode *inode, struct file * file)
  2489. {
  2490. mddev_t *mddev = kdev_to_mddev(inode->i_rdev);
  2491. if (mddev)
  2492. atomic_dec(&mddev->active);
  2493. return 0;
  2494. }
  2495. static struct block_device_operations md_fops=
  2496. {
  2497. owner: THIS_MODULE,
  2498. open: md_open,
  2499. release: md_release,
  2500. ioctl: md_ioctl,
  2501. };
  2502. int md_thread(void * arg)
  2503. {
  2504. mdk_thread_t *thread = arg;
  2505. md_lock_kernel();
  2506. /*
  2507.  * Detach thread
  2508.  */
  2509. daemonize();
  2510. sprintf(current->comm, thread->name);
  2511. md_init_signals();
  2512. md_flush_signals();
  2513. thread->tsk = current;
  2514. /*
  2515.  * md_thread is a 'system-thread', it's priority should be very
  2516.  * high. We avoid resource deadlocks individually in each
  2517.  * raid personality. (RAID5 does preallocation) We also use RR and
  2518.  * the very same RT priority as kswapd, thus we will never get
  2519.  * into a priority inversion deadlock.
  2520.  *
  2521.  * we definitely have to have equal or higher priority than
  2522.  * bdflush, otherwise bdflush will deadlock if there are too
  2523.  * many dirty RAID5 blocks.
  2524.  */
  2525. current->policy = SCHED_OTHER;
  2526. current->nice = -20;
  2527. md_unlock_kernel();
  2528. complete(thread->event);
  2529. while (thread->run) {
  2530. void (*run)(void *data);
  2531. DECLARE_WAITQUEUE(wait, current);
  2532. add_wait_queue(&thread->wqueue, &wait);
  2533. set_task_state(current, TASK_INTERRUPTIBLE);
  2534. if (!test_bit(THREAD_WAKEUP, &thread->flags)) {
  2535. dprintk("md: thread %p went to sleep.n", thread);
  2536. schedule();
  2537. dprintk("md: thread %p woke up.n", thread);
  2538. }
  2539. current->state = TASK_RUNNING;
  2540. remove_wait_queue(&thread->wqueue, &wait);
  2541. clear_bit(THREAD_WAKEUP, &thread->flags);
  2542. run = thread->run;
  2543. if (run) {
  2544. run(thread->data);
  2545. run_task_queue(&tq_disk);
  2546. }
  2547. if (md_signal_pending(current))
  2548. md_flush_signals();
  2549. }
  2550. complete(thread->event);
  2551. return 0;
  2552. }
  2553. void md_wakeup_thread(mdk_thread_t *thread)
  2554. {
  2555. dprintk("md: waking up MD thread %p.n", thread);
  2556. set_bit(THREAD_WAKEUP, &thread->flags);
  2557. wake_up(&thread->wqueue);
  2558. }
  2559. mdk_thread_t *md_register_thread(void (*run) (void *),
  2560. void *data, const char *name)
  2561. {
  2562. mdk_thread_t *thread;
  2563. int ret;
  2564. struct completion event;
  2565. thread = (mdk_thread_t *) kmalloc
  2566. (sizeof(mdk_thread_t), GFP_KERNEL);
  2567. if (!thread)
  2568. return NULL;
  2569. memset(thread, 0, sizeof(mdk_thread_t));
  2570. md_init_waitqueue_head(&thread->wqueue);
  2571. init_completion(&event);
  2572. thread->event = &event;
  2573. thread->run = run;
  2574. thread->data = data;
  2575. thread->name = name;
  2576. ret = kernel_thread(md_thread, thread, 0);
  2577. if (ret < 0) {
  2578. kfree(thread);
  2579. return NULL;
  2580. }
  2581. wait_for_completion(&event);
  2582. return thread;
  2583. }
  2584. void md_interrupt_thread(mdk_thread_t *thread)
  2585. {
  2586. if (!thread->tsk) {
  2587. MD_BUG();
  2588. return;
  2589. }
  2590. dprintk("interrupting MD-thread pid %dn", thread->tsk->pid);
  2591. send_sig(SIGKILL, thread->tsk, 1);
  2592. }
  2593. void md_unregister_thread(mdk_thread_t *thread)
  2594. {
  2595. struct completion event;
  2596. init_completion(&event);
  2597. thread->event = &event;
  2598. thread->run = NULL;
  2599. thread->name = NULL;
  2600. md_interrupt_thread(thread);
  2601. wait_for_completion(&event);
  2602. kfree(thread);
  2603. }
  2604. void md_recover_arrays(void)
  2605. {
  2606. if (!md_recovery_thread) {
  2607. MD_BUG();
  2608. return;
  2609. }
  2610. md_wakeup_thread(md_recovery_thread);
  2611. }
  2612. int md_error(mddev_t *mddev, kdev_t rdev)
  2613. {
  2614. mdk_rdev_t * rrdev;
  2615. dprintk("md_error dev:(%d:%d), rdev:(%d:%d), (caller: %p,%p,%p,%p).n",
  2616. MAJOR(dev),MINOR(dev),MAJOR(rdev),MINOR(rdev),
  2617. __builtin_return_address(0),__builtin_return_address(1),
  2618. __builtin_return_address(2),__builtin_return_address(3));
  2619. if (!mddev) {
  2620. MD_BUG();
  2621. return 0;
  2622. }
  2623. rrdev = find_rdev(mddev, rdev);
  2624. if (!rrdev || rrdev->faulty)
  2625. return 0;
  2626. if (!mddev->pers->error_handler
  2627. || mddev->pers->error_handler(mddev,rdev) <= 0) {
  2628. free_disk_sb(rrdev);
  2629. rrdev->faulty = 1;
  2630. } else
  2631. return 1;
  2632. /*
  2633.  * if recovery was running, stop it now.
  2634.  */
  2635. if (mddev->pers->stop_resync)
  2636. mddev->pers->stop_resync(mddev);
  2637. if (mddev->recovery_running)
  2638. md_interrupt_thread(md_recovery_thread);
  2639. md_recover_arrays();
  2640. return 0;
  2641. }
  2642. static int status_unused(char * page)
  2643. {
  2644. int sz = 0, i = 0;
  2645. mdk_rdev_t *rdev;
  2646. struct md_list_head *tmp;
  2647. sz += sprintf(page + sz, "unused devices: ");
  2648. ITERATE_RDEV_ALL(rdev,tmp) {
  2649. if (!rdev->same_set.next && !rdev->same_set.prev) {
  2650. /*
  2651.  * The device is not yet used by any array.
  2652.  */
  2653. i++;
  2654. sz += sprintf(page + sz, "%s ",
  2655. partition_name(rdev->dev));
  2656. }
  2657. }
  2658. if (!i)
  2659. sz += sprintf(page + sz, "<none>");
  2660. sz += sprintf(page + sz, "n");
  2661. return sz;
  2662. }
  2663. static int status_resync(char * page, mddev_t * mddev)
  2664. {
  2665. int sz = 0;
  2666. unsigned long max_blocks, resync, res, dt, db, rt;
  2667. resync = (mddev->curr_resync - atomic_read(&mddev->recovery_active))/2;
  2668. max_blocks = mddev->sb->size;
  2669. /*
  2670.  * Should not happen.
  2671.  */
  2672. if (!max_blocks) {
  2673. MD_BUG();
  2674. return 0;
  2675. }
  2676. res = (resync/1024)*1000/(max_blocks/1024 + 1);
  2677. {
  2678. int i, x = res/50, y = 20-x;
  2679. sz += sprintf(page + sz, "[");
  2680. for (i = 0; i < x; i++)
  2681. sz += sprintf(page + sz, "=");
  2682. sz += sprintf(page + sz, ">");
  2683. for (i = 0; i < y; i++)
  2684. sz += sprintf(page + sz, ".");
  2685. sz += sprintf(page + sz, "] ");
  2686. }
  2687. if (!mddev->recovery_running)
  2688. /*
  2689.  * true resync
  2690.  */
  2691. sz += sprintf(page + sz, " resync =%3lu.%lu%% (%lu/%lu)",
  2692. res/10, res % 10, resync, max_blocks);
  2693. else
  2694. /*
  2695.  * recovery ...
  2696.  */
  2697. sz += sprintf(page + sz, " recovery =%3lu.%lu%% (%lu/%lu)",
  2698. res/10, res % 10, resync, max_blocks);
  2699. /*
  2700.  * We do not want to overflow, so the order of operands and
  2701.  * the * 100 / 100 trick are important. We do a +1 to be
  2702.  * safe against division by zero. We only estimate anyway.
  2703.  *
  2704.  * dt: time from mark until now
  2705.  * db: blocks written from mark until now
  2706.  * rt: remaining time
  2707.  */
  2708. dt = ((jiffies - mddev->resync_mark) / HZ);
  2709. if (!dt) dt++;
  2710. db = resync - (mddev->resync_mark_cnt/2);
  2711. rt = (dt * ((max_blocks-resync) / (db/100+1)))/100;
  2712. sz += sprintf(page + sz, " finish=%lu.%lumin", rt / 60, (rt % 60)/6);
  2713. sz += sprintf(page + sz, " speed=%ldK/sec", db/dt);
  2714. return sz;
  2715. }
  2716. static int md_status_read_proc(char *page, char **start, off_t off,
  2717. int count, int *eof, void *data)
  2718. {
  2719. int sz = 0, j, size;
  2720. struct md_list_head *tmp, *tmp2;
  2721. mdk_rdev_t *rdev;
  2722. mddev_t *mddev;
  2723. sz += sprintf(page + sz, "Personalities : ");
  2724. for (j = 0; j < MAX_PERSONALITY; j++)
  2725. if (pers[j])
  2726. sz += sprintf(page+sz, "[%s] ", pers[j]->name);
  2727. sz += sprintf(page+sz, "n");
  2728. sz += sprintf(page+sz, "read_ahead ");
  2729. if (read_ahead[MD_MAJOR] == INT_MAX)
  2730. sz += sprintf(page+sz, "not setn");
  2731. else
  2732. sz += sprintf(page+sz, "%d sectorsn", read_ahead[MD_MAJOR]);
  2733. ITERATE_MDDEV(mddev,tmp) {
  2734. sz += sprintf(page + sz, "md%d : %sactive", mdidx(mddev),
  2735. mddev->pers ? "" : "in");
  2736. if (mddev->pers) {
  2737. if (mddev->ro)
  2738. sz += sprintf(page + sz, " (read-only)");
  2739. sz += sprintf(page + sz, " %s", mddev->pers->name);
  2740. }
  2741. size = 0;
  2742. ITERATE_RDEV(mddev,rdev,tmp2) {
  2743. sz += sprintf(page + sz, " %s[%d]",
  2744. partition_name(rdev->dev), rdev->desc_nr);
  2745. if (rdev->faulty) {
  2746. sz += sprintf(page + sz, "(F)");
  2747. continue;
  2748. }
  2749. size += rdev->size;
  2750. }
  2751. if (mddev->nb_dev) {
  2752. if (mddev->pers)
  2753. sz += sprintf(page + sz, "n      %d blocks",
  2754.  md_size[mdidx(mddev)]);
  2755. else
  2756. sz += sprintf(page + sz, "n      %d blocks", size);
  2757. }
  2758. if (!mddev->pers) {
  2759. sz += sprintf(page+sz, "n");
  2760. continue;
  2761. }
  2762. sz += mddev->pers->status (page+sz, mddev);
  2763. sz += sprintf(page+sz, "n      ");
  2764. if (mddev->curr_resync) {
  2765. sz += status_resync (page+sz, mddev);
  2766. } else {
  2767. if (sem_getcount(&mddev->resync_sem) != 1)
  2768. sz += sprintf(page + sz, " resync=DELAYED");
  2769. }
  2770. sz += sprintf(page + sz, "n");
  2771. }
  2772. sz += status_unused(page + sz);
  2773. return sz;
  2774. }
  2775. int register_md_personality(int pnum, mdk_personality_t *p)
  2776. {
  2777. if (pnum >= MAX_PERSONALITY) {
  2778. MD_BUG();
  2779. return -EINVAL;
  2780. }
  2781. if (pers[pnum]) {
  2782. MD_BUG();
  2783. return -EBUSY;
  2784. }
  2785. pers[pnum] = p;
  2786. printk(KERN_INFO "md: %s personality registered as nr %dn", p->name, pnum);
  2787. return 0;
  2788. }
  2789. int unregister_md_personality(int pnum)
  2790. {
  2791. if (pnum >= MAX_PERSONALITY) {
  2792. MD_BUG();
  2793. return -EINVAL;
  2794. }
  2795. printk(KERN_INFO "md: %s personality unregisteredn", pers[pnum]->name);
  2796. pers[pnum] = NULL;
  2797. return 0;
  2798. }
  2799. mdp_disk_t *get_spare(mddev_t *mddev)
  2800. {
  2801. mdp_super_t *sb = mddev->sb;
  2802. mdp_disk_t *disk;
  2803. mdk_rdev_t *rdev;
  2804. struct md_list_head *tmp;
  2805. ITERATE_RDEV(mddev,rdev,tmp) {
  2806. if (rdev->faulty)
  2807. continue;
  2808. if (!rdev->sb) {
  2809. MD_BUG();
  2810. continue;
  2811. }
  2812. disk = &sb->disks[rdev->desc_nr];
  2813. if (disk_faulty(disk)) {
  2814. MD_BUG();
  2815. continue;
  2816. }
  2817. if (disk_active(disk))
  2818. continue;
  2819. return disk;
  2820. }
  2821. return NULL;
  2822. }
  2823. static unsigned int sync_io[DK_MAX_MAJOR][DK_MAX_DISK];
  2824. void md_sync_acct(kdev_t dev, unsigned long nr_sectors)
  2825. {
  2826. unsigned int major = MAJOR(dev);
  2827. unsigned int index;
  2828. index = disk_index(dev);
  2829. if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
  2830. return;
  2831. sync_io[major][index] += nr_sectors;
  2832. }
  2833. static int is_mddev_idle(mddev_t *mddev)
  2834. {
  2835. mdk_rdev_t * rdev;
  2836. struct md_list_head *tmp;
  2837. int idle;
  2838. unsigned long curr_events;
  2839. idle = 1;
  2840. ITERATE_RDEV(mddev,rdev,tmp) {
  2841. int major = MAJOR(rdev->dev);
  2842. int idx = disk_index(rdev->dev);
  2843. if ((idx >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
  2844. continue;
  2845. curr_events = kstat.dk_drive_rblk[major][idx] +
  2846. kstat.dk_drive_wblk[major][idx] ;
  2847. curr_events -= sync_io[major][idx];
  2848. if ((curr_events - rdev->last_events) > 32) {
  2849. rdev->last_events = curr_events;
  2850. idle = 0;
  2851. }
  2852. }
  2853. return idle;
  2854. }
  2855. MD_DECLARE_WAIT_QUEUE_HEAD(resync_wait);
  2856. void md_done_sync(mddev_t *mddev, int blocks, int ok)
  2857. {
  2858. /* another "blocks" (512byte) blocks have been synced */
  2859. atomic_sub(blocks, &mddev->recovery_active);
  2860. wake_up(&mddev->recovery_wait);
  2861. if (!ok) {
  2862. // stop recovery, signal do_sync ....
  2863. if (mddev->pers->stop_resync)
  2864. mddev->pers->stop_resync(mddev);
  2865. if (mddev->recovery_running)
  2866. md_interrupt_thread(md_recovery_thread);
  2867. }
  2868. }
  2869. #define SYNC_MARKS 10
  2870. #define SYNC_MARK_STEP (3*HZ)
  2871. int md_do_sync(mddev_t *mddev, mdp_disk_t *spare)
  2872. {
  2873. mddev_t *mddev2;
  2874. unsigned int max_sectors, currspeed,
  2875. j, window, err, serialize;
  2876. unsigned long mark[SYNC_MARKS];
  2877. unsigned long mark_cnt[SYNC_MARKS];
  2878. int last_mark,m;
  2879. struct md_list_head *tmp;
  2880. unsigned long last_check;
  2881. err = down_interruptible(&mddev->resync_sem);
  2882. if (err)
  2883. goto out_nolock;
  2884. recheck:
  2885. serialize = 0;
  2886. ITERATE_MDDEV(mddev2,tmp) {
  2887. if (mddev2 == mddev)
  2888. continue;
  2889. if (mddev2->curr_resync && match_mddev_units(mddev,mddev2)) {
  2890. printk(KERN_INFO "md: delaying resync of md%d until md%d "
  2891.        "has finished resync (they share one or more physical units)n",
  2892.        mdidx(mddev), mdidx(mddev2));
  2893. serialize = 1;
  2894. break;
  2895. }
  2896. }
  2897. if (serialize) {
  2898. interruptible_sleep_on(&resync_wait);
  2899. if (md_signal_pending(current)) {
  2900. md_flush_signals();
  2901. err = -EINTR;
  2902. goto out;
  2903. }
  2904. goto recheck;
  2905. }
  2906. mddev->curr_resync = 1;
  2907. max_sectors = mddev->sb->size<<1;
  2908. printk(KERN_INFO "md: syncing RAID array md%dn", mdidx(mddev));
  2909. printk(KERN_INFO "md: minimum _guaranteed_ reconstruction speed: %d KB/sec/disc.n",
  2910. sysctl_speed_limit_min);
  2911. printk(KERN_INFO "md: using maximum available idle IO bandwith "
  2912.        "(but not more than %d KB/sec) for reconstruction.n",
  2913.        sysctl_speed_limit_max);
  2914. /*
  2915.  * Resync has low priority.
  2916.  */
  2917. current->nice = 19;
  2918. is_mddev_idle(mddev); /* this also initializes IO event counters */
  2919. for (m = 0; m < SYNC_MARKS; m++) {
  2920. mark[m] = jiffies;
  2921. mark_cnt[m] = 0;
  2922. }
  2923. last_mark = 0;
  2924. mddev->resync_mark = mark[last_mark];
  2925. mddev->resync_mark_cnt = mark_cnt[last_mark];
  2926. /*
  2927.  * Tune reconstruction:
  2928.  */
  2929. window = vm_max_readahead*(PAGE_SIZE/512);
  2930. printk(KERN_INFO "md: using %dk window, over a total of %d blocks.n",
  2931.        window/2,max_sectors/2);
  2932. atomic_set(&mddev->recovery_active, 0);
  2933. init_waitqueue_head(&mddev->recovery_wait);
  2934. last_check = 0;
  2935. for (j = 0; j < max_sectors;) {
  2936. int sectors;
  2937. sectors = mddev->pers->sync_request(mddev, j);
  2938. if (sectors < 0) {
  2939. err = sectors;
  2940. goto out;
  2941. }
  2942. atomic_add(sectors, &mddev->recovery_active);
  2943. j += sectors;
  2944. mddev->curr_resync = j;
  2945. if (last_check + window > j)
  2946. continue;
  2947. last_check = j;
  2948. run_task_queue(&tq_disk);
  2949. repeat:
  2950. if (jiffies >= mark[last_mark] + SYNC_MARK_STEP ) {
  2951. /* step marks */
  2952. int next = (last_mark+1) % SYNC_MARKS;
  2953. mddev->resync_mark = mark[next];
  2954. mddev->resync_mark_cnt = mark_cnt[next];
  2955. mark[next] = jiffies;
  2956. mark_cnt[next] = j - atomic_read(&mddev->recovery_active);
  2957. last_mark = next;
  2958. }
  2959. if (md_signal_pending(current)) {
  2960. /*
  2961.  * got a signal, exit.
  2962.  */
  2963. mddev->curr_resync = 0;
  2964. printk(KERN_INFO "md: md_do_sync() got signal ... exitingn");
  2965. md_flush_signals();
  2966. err = -EINTR;
  2967. goto out;
  2968. }
  2969. /*
  2970.  * this loop exits only if either when we are slower than
  2971.  * the 'hard' speed limit, or the system was IO-idle for
  2972.  * a jiffy.
  2973.  * the system might be non-idle CPU-wise, but we only care
  2974.  * about not overloading the IO subsystem. (things like an
  2975.  * e2fsck being done on the RAID array should execute fast)
  2976.  */
  2977. if (md_need_resched(current))
  2978. schedule();
  2979. currspeed = (j-mddev->resync_mark_cnt)/2/((jiffies-mddev->resync_mark)/HZ +1) +1;
  2980. if (currspeed > sysctl_speed_limit_min) {
  2981. current->nice = 19;
  2982. if ((currspeed > sysctl_speed_limit_max) ||
  2983. !is_mddev_idle(mddev)) {
  2984. current->state = TASK_INTERRUPTIBLE;
  2985. md_schedule_timeout(HZ/4);
  2986. goto repeat;
  2987. }
  2988. } else
  2989. current->nice = -20;
  2990. }
  2991. printk(KERN_INFO "md: md%d: sync done.n",mdidx(mddev));
  2992. err = 0;
  2993. /*
  2994.  * this also signals 'finished resyncing' to md_stop
  2995.  */
  2996. out:
  2997. wait_disk_event(mddev->recovery_wait, atomic_read(&mddev->recovery_active)==0);
  2998. up(&mddev->resync_sem);
  2999. out_nolock:
  3000. mddev->curr_resync = 0;
  3001. wake_up(&resync_wait);
  3002. return err;
  3003. }
  3004. /*
  3005.  * This is a kernel thread which syncs a spare disk with the active array
  3006.  *
  3007.  * the amount of foolproofing might seem to be a tad excessive, but an
  3008.  * early (not so error-safe) version of raid1syncd synced the first 0.5 gigs
  3009.  * of my root partition with the first 0.5 gigs of my /home partition ... so
  3010.  * i'm a bit nervous ;)
  3011.  */
  3012. void md_do_recovery(void *data)
  3013. {
  3014. int err;
  3015. mddev_t *mddev;
  3016. mdp_super_t *sb;
  3017. mdp_disk_t *spare;
  3018. struct md_list_head *tmp;
  3019. printk(KERN_INFO "md: recovery thread got woken up ...n");
  3020. restart:
  3021. ITERATE_MDDEV(mddev,tmp) {
  3022. sb = mddev->sb;
  3023. if (!sb)
  3024. continue;
  3025. if (mddev->recovery_running)
  3026. continue;
  3027. if (sb->active_disks == sb->raid_disks)
  3028. continue;
  3029. if (mddev->sb_dirty)
  3030. md_update_sb(mddev);
  3031. if (!sb->spare_disks) {
  3032. printk(KERN_ERR "md%d: no spare disk to reconstruct array! "
  3033.        "-- continuing in degraded moden", mdidx(mddev));
  3034. continue;
  3035. }
  3036. /*
  3037.  * now here we get the spare and resync it.
  3038.  */
  3039. spare = get_spare(mddev);
  3040. if (!spare)
  3041. continue;
  3042. printk(KERN_INFO "md%d: resyncing spare disk %s to replace failed diskn",
  3043.        mdidx(mddev), partition_name(MKDEV(spare->major,spare->minor)));
  3044. if (!mddev->pers->diskop)
  3045. continue;
  3046. if (mddev->pers->diskop(mddev, &spare, DISKOP_SPARE_WRITE))
  3047. continue;
  3048. down(&mddev->recovery_sem);
  3049. mddev->recovery_running = 1;
  3050. err = md_do_sync(mddev, spare);
  3051. if (err == -EIO) {
  3052. printk(KERN_INFO "md%d: spare disk %s failed, skipping to next spare.n",
  3053.        mdidx(mddev), partition_name(MKDEV(spare->major,spare->minor)));
  3054. if (!disk_faulty(spare)) {
  3055. mddev->pers->diskop(mddev,&spare,DISKOP_SPARE_INACTIVE);
  3056. mark_disk_faulty(spare);
  3057. mark_disk_nonsync(spare);
  3058. mark_disk_inactive(spare);
  3059. sb->spare_disks--;
  3060. sb->working_disks--;
  3061. sb->failed_disks++;
  3062. }
  3063. } else
  3064. if (disk_faulty(spare))
  3065. mddev->pers->diskop(mddev, &spare,
  3066. DISKOP_SPARE_INACTIVE);
  3067. if (err == -EINTR || err == -ENOMEM) {
  3068. /*
  3069.  * Recovery got interrupted, or ran out of mem ...
  3070.  * signal back that we have finished using the array.
  3071.  */
  3072. mddev->pers->diskop(mddev, &spare,
  3073.  DISKOP_SPARE_INACTIVE);
  3074. up(&mddev->recovery_sem);
  3075. mddev->recovery_running = 0;
  3076. continue;
  3077. } else {
  3078. mddev->recovery_running = 0;
  3079. up(&mddev->recovery_sem);
  3080. }
  3081. if (!disk_faulty(spare)) {
  3082. /*
  3083.  * the SPARE_ACTIVE diskop possibly changes the
  3084.  * pointer too
  3085.  */
  3086. mddev->pers->diskop(mddev, &spare, DISKOP_SPARE_ACTIVE);
  3087. mark_disk_sync(spare);
  3088. mark_disk_active(spare);
  3089. sb->active_disks++;
  3090. sb->spare_disks--;
  3091. }
  3092. mddev->sb_dirty = 1;
  3093. md_update_sb(mddev);
  3094. goto restart;
  3095. }
  3096. printk(KERN_INFO "md: recovery thread finished ...n");
  3097. }
  3098. int md_notify_reboot(struct notifier_block *this,
  3099. unsigned long code, void *x)
  3100. {
  3101. struct md_list_head *tmp;
  3102. mddev_t *mddev;
  3103. if ((code == MD_SYS_DOWN) || (code == MD_SYS_HALT)
  3104. || (code == MD_SYS_POWER_OFF)) {
  3105. printk(KERN_INFO "md: stopping all md devices.n");
  3106. ITERATE_MDDEV(mddev,tmp)
  3107. do_md_stop (mddev, 1);
  3108. /*
  3109.  * certain more exotic SCSI devices are known to be
  3110.  * volatile wrt too early system reboots. While the
  3111.  * right place to handle this issue is the given
  3112.  * driver, we do want to have a safe RAID driver ...
  3113.  */
  3114. md_mdelay(1000*1);
  3115. }
  3116. return NOTIFY_DONE;
  3117. }
  3118. struct notifier_block md_notifier = {
  3119. notifier_call: md_notify_reboot,
  3120. next: NULL,
  3121. priority: INT_MAX, /* before any real devices */
  3122. };
  3123. static void md_geninit(void)
  3124. {
  3125. int i;
  3126. for(i = 0; i < MAX_MD_DEVS; i++) {
  3127. md_blocksizes[i] = 1024;
  3128. md_size[i] = 0;
  3129. md_hardsect_sizes[i] = 512;
  3130. md_maxreadahead[i] = MD_READAHEAD;
  3131. }
  3132. blksize_size[MAJOR_NR] = md_blocksizes;
  3133. blk_size[MAJOR_NR] = md_size;
  3134. max_readahead[MAJOR_NR] = md_maxreadahead;
  3135. hardsect_size[MAJOR_NR] = md_hardsect_sizes;
  3136. dprintk("md: sizeof(mdp_super_t) = %dn", (int)sizeof(mdp_super_t));
  3137. #ifdef CONFIG_PROC_FS
  3138. create_proc_read_entry("mdstat", 0, NULL, md_status_read_proc, NULL);
  3139. #endif
  3140. }
  3141. int md__init md_init(void)
  3142. {
  3143. static char * name = "mdrecoveryd";
  3144. int minor;
  3145. printk(KERN_INFO "md: md driver %d.%d.%d MAX_MD_DEVS=%d, MD_SB_DISKS=%dn",
  3146. MD_MAJOR_VERSION, MD_MINOR_VERSION,
  3147. MD_PATCHLEVEL_VERSION, MAX_MD_DEVS, MD_SB_DISKS);
  3148. if (devfs_register_blkdev (MAJOR_NR, "md", &md_fops))
  3149. {
  3150. printk(KERN_ALERT "md: Unable to get major %d for mdn", MAJOR_NR);
  3151. return (-1);
  3152. }
  3153. devfs_handle = devfs_mk_dir (NULL, "md", NULL);
  3154. /* we don't use devfs_register_series because we want to fill md_hd_struct */
  3155. for (minor=0; minor < MAX_MD_DEVS; ++minor) {
  3156. char devname[128];
  3157. sprintf (devname, "%u", minor);
  3158. md_hd_struct[minor].de = devfs_register (devfs_handle,
  3159. devname, DEVFS_FL_DEFAULT, MAJOR_NR, minor,
  3160. S_IFBLK | S_IRUSR | S_IWUSR, &md_fops, NULL);
  3161. }
  3162. /* forward all md request to md_make_request */
  3163. blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR), md_make_request);
  3164. read_ahead[MAJOR_NR] = INT_MAX;
  3165. add_gendisk(&md_gendisk);
  3166. md_recovery_thread = md_register_thread(md_do_recovery, NULL, name);
  3167. if (!md_recovery_thread)
  3168. printk(KERN_ALERT "md: bug: couldn't allocate md_recovery_threadn");
  3169. md_register_reboot_notifier(&md_notifier);
  3170. raid_table_header = register_sysctl_table(raid_root_table, 1);
  3171. md_geninit();
  3172. return (0);
  3173. }
  3174. #ifndef MODULE
  3175. /*
  3176.  * When md (and any require personalities) are compiled into the kernel
  3177.  * (not a module), arrays can be assembles are boot time using with AUTODETECT
  3178.  * where specially marked partitions are registered with md_autodetect_dev(),
  3179.  * and with MD_BOOT where devices to be collected are given on the boot line
  3180.  * with md=.....
  3181.  * The code for that is here.
  3182.  */
  3183. struct {
  3184. int set;
  3185. int noautodetect;
  3186. } raid_setup_args md__initdata;
  3187. /*
  3188.  * Searches all registered partitions for autorun RAID arrays
  3189.  * at boot time.
  3190.  */
  3191. static kdev_t detected_devices[128];
  3192. static int dev_cnt;
  3193. void md_autodetect_dev(kdev_t dev)
  3194. {
  3195. if (dev_cnt >= 0 && dev_cnt < 127)
  3196. detected_devices[dev_cnt++] = dev;
  3197. }
  3198. static void autostart_arrays(void)
  3199. {
  3200. mdk_rdev_t *rdev;
  3201. int i;
  3202. printk(KERN_INFO "md: Autodetecting RAID arrays.n");
  3203. for (i = 0; i < dev_cnt; i++) {
  3204. kdev_t dev = detected_devices[i];
  3205. if (md_import_device(dev,1)) {
  3206. printk(KERN_ALERT "md: could not import %s!n",
  3207. partition_name(dev));
  3208. continue;
  3209. }
  3210. /*
  3211.  * Sanity checks:
  3212.  */
  3213. rdev = find_rdev_all(dev);
  3214. if (!rdev) {
  3215. MD_BUG();
  3216. continue;
  3217. }
  3218. if (rdev->faulty) {
  3219. MD_BUG();
  3220. continue;
  3221. }
  3222. md_list_add(&rdev->pending, &pending_raid_disks);
  3223. }
  3224. dev_cnt = 0;
  3225. autorun_devices(-1);
  3226. }
  3227. static struct {
  3228. char device_set [MAX_MD_DEVS];
  3229. int pers[MAX_MD_DEVS];
  3230. int chunk[MAX_MD_DEVS];
  3231. char *device_names[MAX_MD_DEVS];
  3232. } md_setup_args md__initdata;
  3233. /*
  3234.  * Parse the command-line parameters given our kernel, but do not
  3235.  * actually try to invoke the MD device now; that is handled by
  3236.  * md_setup_drive after the low-level disk drivers have initialised.
  3237.  *
  3238.  * 27/11/1999: Fixed to work correctly with the 2.3 kernel (which
  3239.  *             assigns the task of parsing integer arguments to the
  3240.  *             invoked program now).  Added ability to initialise all
  3241.  *             the MD devices (by specifying multiple "md=" lines)
  3242.  *             instead of just one.  -- KTK
  3243.  * 18May2000: Added support for persistant-superblock arrays:
  3244.  *             md=n,0,factor,fault,device-list   uses RAID0 for device n
  3245.  *             md=n,-1,factor,fault,device-list  uses LINEAR for device n
  3246.  *             md=n,device-list      reads a RAID superblock from the devices
  3247.  *             elements in device-list are read by name_to_kdev_t so can be
  3248.  *             a hex number or something like /dev/hda1 /dev/sdb
  3249.  * 2001-06-03: Dave Cinege <dcinege@psychosis.com>
  3250.  * Shifted name_to_kdev_t() and related operations to md_set_drive()
  3251.  * for later execution. Rewrote section to make devfs compatible.
  3252.  */
  3253. static int md__init md_setup(char *str)
  3254. {
  3255. int minor, level, factor, fault;
  3256. char *pername = "";
  3257. char *str1 = str;
  3258. if (get_option(&str, &minor) != 2) { /* MD Number */
  3259. printk(KERN_WARNING "md: Too few arguments supplied to md=.n");
  3260. return 0;
  3261. }
  3262. if (minor >= MAX_MD_DEVS) {
  3263. printk(KERN_WARNING "md: md=%d, Minor device number too high.n", minor);
  3264. return 0;
  3265. } else if (md_setup_args.device_names[minor]) {
  3266. printk(KERN_WARNING "md: md=%d, Specified more then once. "
  3267.        "Replacing previous definition.n", minor);
  3268. }
  3269. switch (get_option(&str, &level)) { /* RAID Personality */
  3270. case 2: /* could be 0 or -1.. */
  3271. if (level == 0 || level == -1) {
  3272. if (get_option(&str, &factor) != 2 || /* Chunk Size */
  3273. get_option(&str, &fault) != 2) {
  3274. printk(KERN_WARNING "md: Too few arguments supplied to md=.n");
  3275. return 0;
  3276. }
  3277. md_setup_args.pers[minor] = level;
  3278. md_setup_args.chunk[minor] = 1 << (factor+12);
  3279. switch(level) {
  3280. case -1:
  3281. level = LINEAR;
  3282. pername = "linear";
  3283. break;
  3284. case 0:
  3285. level = RAID0;
  3286. pername = "raid0";
  3287. break;
  3288. default:
  3289. printk(KERN_WARNING
  3290.        "md: The kernel has not been configured for raid%d support!n",
  3291.        level);
  3292. return 0;
  3293. }
  3294. md_setup_args.pers[minor] = level;
  3295. break;
  3296. }
  3297. /* FALL THROUGH */
  3298. case 1: /* the first device is numeric */
  3299. str = str1;
  3300. /* FALL THROUGH */
  3301. case 0:
  3302. md_setup_args.pers[minor] = 0;
  3303. pername="super-block";
  3304. }
  3305. printk(KERN_INFO "md: Will configure md%d (%s) from %s, below.n",
  3306. minor, pername, str);
  3307. md_setup_args.device_names[minor] = str;
  3308. return 1;
  3309. }
  3310. extern kdev_t name_to_kdev_t(char *line) md__init;
  3311. void md__init md_setup_drive(void)
  3312. {
  3313. int minor, i;
  3314. kdev_t dev;
  3315. mddev_t*mddev;
  3316. kdev_t devices[MD_SB_DISKS+1];
  3317. for (minor = 0; minor < MAX_MD_DEVS; minor++) {
  3318. int err = 0;
  3319. char *devname;
  3320. mdu_disk_info_t dinfo;
  3321. if ((devname = md_setup_args.device_names[minor]) == 0) continue;
  3322. for (i = 0; i < MD_SB_DISKS && devname != 0; i++) {
  3323. char *p;
  3324. void *handle;
  3325. p = strchr(devname, ',');
  3326. if (p)
  3327. *p++ = 0;
  3328. dev = name_to_kdev_t(devname);
  3329. handle = devfs_find_handle(NULL, devname, MAJOR (dev), MINOR (dev),
  3330. DEVFS_SPECIAL_BLK, 1);
  3331. if (handle != 0) {
  3332. unsigned major, minor;
  3333. devfs_get_maj_min(handle, &major, &minor);
  3334. dev = MKDEV(major, minor);
  3335. }
  3336. if (dev == 0) {
  3337. printk(KERN_WARNING "md: Unknown device name: %sn", devname);
  3338. break;
  3339. }
  3340. devices[i] = dev;
  3341. md_setup_args.device_set[minor] = 1;
  3342. devname = p;
  3343. }
  3344. devices[i] = 0;
  3345. if (md_setup_args.device_set[minor] == 0)
  3346. continue;
  3347. if (mddev_map[minor].mddev) {
  3348. printk(KERN_WARNING
  3349.        "md: Ignoring md=%d, already autodetected. (Use raid=noautodetect)n",
  3350.        minor);
  3351. continue;
  3352. }
  3353. printk(KERN_INFO "md: Loading md%d: %sn", minor, md_setup_args.device_names[minor]);
  3354. mddev = alloc_mddev(MKDEV(MD_MAJOR,minor));
  3355. if (!mddev) {
  3356. printk(KERN_ERR "md: kmalloc failed - cannot start array %dn", minor);
  3357. continue;
  3358. }
  3359. if (md_setup_args.pers[minor]) {
  3360. /* non-persistent */
  3361. mdu_array_info_t ainfo;
  3362. ainfo.level = pers_to_level(md_setup_args.pers[minor]);
  3363. ainfo.size = 0;
  3364. ainfo.nr_disks =0;
  3365. ainfo.raid_disks =0;
  3366. ainfo.md_minor =minor;
  3367. ainfo.not_persistent = 1;
  3368. ainfo.state = (1 << MD_SB_CLEAN);
  3369. ainfo.active_disks = 0;
  3370. ainfo.working_disks = 0;
  3371. ainfo.failed_disks = 0;
  3372. ainfo.spare_disks = 0;
  3373. ainfo.layout = 0;
  3374. ainfo.chunk_size = md_setup_args.chunk[minor];
  3375. err = set_array_info(mddev, &ainfo);
  3376. for (i = 0; !err && (dev = devices[i]); i++) {
  3377. dinfo.number = i;
  3378. dinfo.raid_disk = i;
  3379. dinfo.state = (1<<MD_DISK_ACTIVE)|(1<<MD_DISK_SYNC);
  3380. dinfo.major = MAJOR(dev);
  3381. dinfo.minor = MINOR(dev);
  3382. mddev->sb->nr_disks++;
  3383. mddev->sb->raid_disks++;
  3384. mddev->sb->active_disks++;
  3385. mddev->sb->working_disks++;
  3386. err = add_new_disk (mddev, &dinfo);
  3387. }
  3388. } else {
  3389. /* persistent */
  3390. for (i = 0; (dev = devices[i]); i++) {
  3391. dinfo.major = MAJOR(dev);
  3392. dinfo.minor = MINOR(dev);
  3393. add_new_disk (mddev, &dinfo);
  3394. }
  3395. }
  3396. if (!err)
  3397. err = do_md_run(mddev);
  3398. if (err) {
  3399. mddev->sb_dirty = 0;
  3400. do_md_stop(mddev, 0);
  3401. printk(KERN_WARNING "md: starting md%d failedn", minor);
  3402. }
  3403. }
  3404. }
  3405. static int md__init raid_setup(char *str)
  3406. {
  3407. int len, pos;
  3408. len = strlen(str) + 1;
  3409. pos = 0;
  3410. while (pos < len) {
  3411. char *comma = strchr(str+pos, ',');
  3412. int wlen;
  3413. if (comma)
  3414. wlen = (comma-str)-pos;
  3415. else wlen = (len-1)-pos;
  3416. if (strncmp(str, "noautodetect", wlen) == 0)
  3417. raid_setup_args.noautodetect = 1;
  3418. pos += wlen+1;
  3419. }
  3420. raid_setup_args.set = 1;
  3421. return 1;
  3422. }
  3423. int md__init md_run_setup(void)
  3424. {
  3425. if (raid_setup_args.noautodetect)
  3426. printk(KERN_INFO "md: Skipping autodetection of RAID arrays. (raid=noautodetect)n");
  3427. else
  3428. autostart_arrays();
  3429. md_setup_drive();
  3430. return 0;
  3431. }
  3432. __setup("raid=", raid_setup);
  3433. __setup("md=", md_setup);
  3434. __initcall(md_init);
  3435. __initcall(md_run_setup);
  3436. #else /* It is a MODULE */
  3437. int init_module(void)
  3438. {
  3439. return md_init();
  3440. }
  3441. static void free_device_names(void)
  3442. {
  3443. while (device_names.next != &device_names) {
  3444. struct list_head *tmp = device_names.next;
  3445. list_del(tmp);
  3446. kfree(tmp);
  3447. }
  3448. }
  3449. void cleanup_module(void)
  3450. {
  3451. md_unregister_thread(md_recovery_thread);
  3452. devfs_unregister(devfs_handle);
  3453. devfs_unregister_blkdev(MAJOR_NR,"md");
  3454. unregister_reboot_notifier(&md_notifier);
  3455. unregister_sysctl_table(raid_table_header);
  3456. #ifdef CONFIG_PROC_FS
  3457. remove_proc_entry("mdstat", NULL);
  3458. #endif
  3459. del_gendisk(&md_gendisk);
  3460. blk_dev[MAJOR_NR].queue = NULL;
  3461. blksize_size[MAJOR_NR] = NULL;
  3462. blk_size[MAJOR_NR] = NULL;
  3463. max_readahead[MAJOR_NR] = NULL;
  3464. hardsect_size[MAJOR_NR] = NULL;
  3465. free_device_names();
  3466. }
  3467. #endif
  3468. MD_EXPORT_SYMBOL(md_size);
  3469. MD_EXPORT_SYMBOL(register_md_personality);
  3470. MD_EXPORT_SYMBOL(unregister_md_personality);
  3471. MD_EXPORT_SYMBOL(partition_name);
  3472. MD_EXPORT_SYMBOL(md_error);
  3473. MD_EXPORT_SYMBOL(md_do_sync);
  3474. MD_EXPORT_SYMBOL(md_sync_acct);
  3475. MD_EXPORT_SYMBOL(md_done_sync);
  3476. MD_EXPORT_SYMBOL(md_recover_arrays);
  3477. MD_EXPORT_SYMBOL(md_register_thread);
  3478. MD_EXPORT_SYMBOL(md_unregister_thread);
  3479. MD_EXPORT_SYMBOL(md_update_sb);
  3480. MD_EXPORT_SYMBOL(md_wakeup_thread);
  3481. MD_EXPORT_SYMBOL(md_print_devices);
  3482. MD_EXPORT_SYMBOL(find_rdev_nr);
  3483. MD_EXPORT_SYMBOL(md_interrupt_thread);
  3484. MD_EXPORT_SYMBOL(mddev_map);
  3485. MD_EXPORT_SYMBOL(md_check_ordering);
  3486. MD_EXPORT_SYMBOL(get_spare);
  3487. MODULE_LICENSE("GPL");