Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'md-3.7-fixes' of git://neil.brown.name/md

Pull md fixes from NeilBrown:
"Some fixes for md in 3.7
- one recently introduced crash for dm-raid10 with discard
- one bug in new functionality that has been around for a few
releases.
- minor bug in md's 'faulty' personality

and UAPI disintegration for md."

* tag 'md-3.7-fixes' of git://neil.brown.name/md:
MD RAID10: Fix oops when creating RAID10 arrays via dm-raid.c
md/raid1: Fix assembling of arrays containing Replacements.
md faulty: use disk_stack_limits()
UAPI: (Scripted) Disintegrate include/linux/raid

+172 -150
+4 -1
drivers/md/faulty.c
··· 315 315 } 316 316 conf->nfaults = 0; 317 317 318 - rdev_for_each(rdev, mddev) 318 + rdev_for_each(rdev, mddev) { 319 319 conf->rdev = rdev; 320 + disk_stack_limits(mddev->gendisk, rdev->bdev, 321 + rdev->data_offset << 9); 322 + } 320 323 321 324 md_set_array_sectors(mddev, faulty_size(mddev, 0, 0)); 322 325 mddev->private = conf;
+1 -1
drivers/md/raid1.c
··· 2710 2710 || disk_idx < 0) 2711 2711 continue; 2712 2712 if (test_bit(Replacement, &rdev->flags)) 2713 - disk = conf->mirrors + conf->raid_disks + disk_idx; 2713 + disk = conf->mirrors + mddev->raid_disks + disk_idx; 2714 2714 else 2715 2715 disk = conf->mirrors + disk_idx; 2716 2716
+9 -6
drivers/md/raid10.c
··· 1783 1783 clear_bit(Unmerged, &rdev->flags); 1784 1784 } 1785 1785 md_integrity_add_rdev(rdev, mddev); 1786 - if (blk_queue_discard(bdev_get_queue(rdev->bdev))) 1786 + if (mddev->queue && blk_queue_discard(bdev_get_queue(rdev->bdev))) 1787 1787 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); 1788 1788 1789 1789 print_conf(conf); ··· 3613 3613 discard_supported = true; 3614 3614 } 3615 3615 3616 - if (discard_supported) 3617 - queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); 3618 - else 3619 - queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); 3620 - 3616 + if (mddev->queue) { 3617 + if (discard_supported) 3618 + queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, 3619 + mddev->queue); 3620 + else 3621 + queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, 3622 + mddev->queue); 3623 + } 3621 3624 /* need to check that every block has at least one working mirror */ 3622 3625 if (!enough(conf, -1)) { 3623 3626 printk(KERN_ERR "md/raid10:%s: not enough operational mirrors.\n",
-2
include/linux/raid/Kbuild
··· 1 - header-y += md_p.h 2 - header-y += md_u.h
include/linux/raid/md_p.h include/uapi/linux/raid/md_p.h
+1 -140
include/linux/raid/md_u.h
··· 11 11 (for example /usr/src/linux/COPYING); if not, write to the Free 12 12 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 13 13 */ 14 - 15 14 #ifndef _MD_U_H 16 15 #define _MD_U_H 17 16 18 - /* 19 - * Different major versions are not compatible. 20 - * Different minor versions are only downward compatible. 21 - * Different patchlevel versions are downward and upward compatible. 22 - */ 23 - #define MD_MAJOR_VERSION 0 24 - #define MD_MINOR_VERSION 90 25 - /* 26 - * MD_PATCHLEVEL_VERSION indicates kernel functionality. 27 - * >=1 means different superblock formats are selectable using SET_ARRAY_INFO 28 - * and major_version/minor_version accordingly 29 - * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT 30 - * in the super status byte 31 - * >=3 means that bitmap superblock version 4 is supported, which uses 32 - * little-ending representation rather than host-endian 33 - */ 34 - #define MD_PATCHLEVEL_VERSION 3 17 + #include <uapi/linux/raid/md_u.h> 35 18 36 - /* ioctls */ 37 - 38 - /* status */ 39 - #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) 40 - #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) 41 - #define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) 42 - #define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) 43 - #define RAID_AUTORUN _IO (MD_MAJOR, 0x14) 44 - #define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) 45 - 46 - /* configuration */ 47 - #define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) 48 - #define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) 49 - #define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) 50 - #define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) 51 - #define SET_DISK_INFO _IO (MD_MAJOR, 0x24) 52 - #define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) 53 - #define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) 54 - #define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) 55 - #define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) 56 - #define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) 57 - #define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) 58 - #define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) 59 - 60 - /* usage */ 61 - #define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) 62 - /* 0x31 was START_ARRAY */ 63 - #define STOP_ARRAY _IO (MD_MAJOR, 0x32) 64 - #define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) 65 - #define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) 66 - 67 - /* 63 partitions with the alternate major number (mdp) */ 68 - #define MdpMinorShift 6 69 - #ifdef __KERNEL__ 70 19 extern int mdp_major; 71 - #endif 72 - 73 - typedef struct mdu_version_s { 74 - int major; 75 - int minor; 76 - int patchlevel; 77 - } mdu_version_t; 78 - 79 - typedef struct mdu_array_info_s { 80 - /* 81 - * Generic constant information 82 - */ 83 - int major_version; 84 - int minor_version; 85 - int patch_version; 86 - int ctime; 87 - int level; 88 - int size; 89 - int nr_disks; 90 - int raid_disks; 91 - int md_minor; 92 - int not_persistent; 93 - 94 - /* 95 - * Generic state information 96 - */ 97 - int utime; /* 0 Superblock update time */ 98 - int state; /* 1 State bits (clean, ...) */ 99 - int active_disks; /* 2 Number of currently active disks */ 100 - int working_disks; /* 3 Number of working disks */ 101 - int failed_disks; /* 4 Number of failed disks */ 102 - int spare_disks; /* 5 Number of spare disks */ 103 - 104 - /* 105 - * Personality information 106 - */ 107 - int layout; /* 0 the array's physical layout */ 108 - int chunk_size; /* 1 chunk size in bytes */ 109 - 110 - } mdu_array_info_t; 111 - 112 - /* non-obvious values for 'level' */ 113 - #define LEVEL_MULTIPATH (-4) 114 - #define LEVEL_LINEAR (-1) 115 - #define LEVEL_FAULTY (-5) 116 - 117 - /* we need a value for 'no level specified' and 0 118 - * means 'raid0', so we need something else. This is 119 - * for internal use only 120 - */ 121 - #define LEVEL_NONE (-1000000) 122 - 123 - typedef struct mdu_disk_info_s { 124 - /* 125 - * configuration/status of one particular disk 126 - */ 127 - int number; 128 - int major; 129 - int minor; 130 - int raid_disk; 131 - int state; 132 - 133 - } mdu_disk_info_t; 134 - 135 - typedef struct mdu_start_info_s { 136 - /* 137 - * configuration/status of one particular disk 138 - */ 139 - int major; 140 - int minor; 141 - int raid_disk; 142 - int state; 143 - 144 - } mdu_start_info_t; 145 - 146 - typedef struct mdu_bitmap_file_s 147 - { 148 - char pathname[4096]; 149 - } mdu_bitmap_file_t; 150 - 151 - typedef struct mdu_param_s 152 - { 153 - int personality; /* 1,2,3,4 */ 154 - int chunk_size; /* in bytes */ 155 - int max_fault; /* unused for now */ 156 - } mdu_param_t; 157 - 158 20 #endif 159 -
+2
include/uapi/linux/raid/Kbuild
··· 1 1 # UAPI Header export list 2 + header-y += md_p.h 3 + header-y += md_u.h
+155
include/uapi/linux/raid/md_u.h
··· 1 + /* 2 + md_u.h : user <=> kernel API between Linux raidtools and RAID drivers 3 + Copyright (C) 1998 Ingo Molnar 4 + 5 + This program is free software; you can redistribute it and/or modify 6 + it under the terms of the GNU General Public License as published by 7 + the Free Software Foundation; either version 2, or (at your option) 8 + any later version. 9 + 10 + You should have received a copy of the GNU General Public License 11 + (for example /usr/src/linux/COPYING); if not, write to the Free 12 + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 13 + */ 14 + 15 + #ifndef _UAPI_MD_U_H 16 + #define _UAPI_MD_U_H 17 + 18 + /* 19 + * Different major versions are not compatible. 20 + * Different minor versions are only downward compatible. 21 + * Different patchlevel versions are downward and upward compatible. 22 + */ 23 + #define MD_MAJOR_VERSION 0 24 + #define MD_MINOR_VERSION 90 25 + /* 26 + * MD_PATCHLEVEL_VERSION indicates kernel functionality. 27 + * >=1 means different superblock formats are selectable using SET_ARRAY_INFO 28 + * and major_version/minor_version accordingly 29 + * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT 30 + * in the super status byte 31 + * >=3 means that bitmap superblock version 4 is supported, which uses 32 + * little-ending representation rather than host-endian 33 + */ 34 + #define MD_PATCHLEVEL_VERSION 3 35 + 36 + /* ioctls */ 37 + 38 + /* status */ 39 + #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) 40 + #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) 41 + #define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) 42 + #define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) 43 + #define RAID_AUTORUN _IO (MD_MAJOR, 0x14) 44 + #define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) 45 + 46 + /* configuration */ 47 + #define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) 48 + #define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) 49 + #define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) 50 + #define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) 51 + #define SET_DISK_INFO _IO (MD_MAJOR, 0x24) 52 + #define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) 53 + #define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) 54 + #define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) 55 + #define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) 56 + #define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) 57 + #define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) 58 + #define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) 59 + 60 + /* usage */ 61 + #define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) 62 + /* 0x31 was START_ARRAY */ 63 + #define STOP_ARRAY _IO (MD_MAJOR, 0x32) 64 + #define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) 65 + #define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) 66 + 67 + /* 63 partitions with the alternate major number (mdp) */ 68 + #define MdpMinorShift 6 69 + 70 + typedef struct mdu_version_s { 71 + int major; 72 + int minor; 73 + int patchlevel; 74 + } mdu_version_t; 75 + 76 + typedef struct mdu_array_info_s { 77 + /* 78 + * Generic constant information 79 + */ 80 + int major_version; 81 + int minor_version; 82 + int patch_version; 83 + int ctime; 84 + int level; 85 + int size; 86 + int nr_disks; 87 + int raid_disks; 88 + int md_minor; 89 + int not_persistent; 90 + 91 + /* 92 + * Generic state information 93 + */ 94 + int utime; /* 0 Superblock update time */ 95 + int state; /* 1 State bits (clean, ...) */ 96 + int active_disks; /* 2 Number of currently active disks */ 97 + int working_disks; /* 3 Number of working disks */ 98 + int failed_disks; /* 4 Number of failed disks */ 99 + int spare_disks; /* 5 Number of spare disks */ 100 + 101 + /* 102 + * Personality information 103 + */ 104 + int layout; /* 0 the array's physical layout */ 105 + int chunk_size; /* 1 chunk size in bytes */ 106 + 107 + } mdu_array_info_t; 108 + 109 + /* non-obvious values for 'level' */ 110 + #define LEVEL_MULTIPATH (-4) 111 + #define LEVEL_LINEAR (-1) 112 + #define LEVEL_FAULTY (-5) 113 + 114 + /* we need a value for 'no level specified' and 0 115 + * means 'raid0', so we need something else. This is 116 + * for internal use only 117 + */ 118 + #define LEVEL_NONE (-1000000) 119 + 120 + typedef struct mdu_disk_info_s { 121 + /* 122 + * configuration/status of one particular disk 123 + */ 124 + int number; 125 + int major; 126 + int minor; 127 + int raid_disk; 128 + int state; 129 + 130 + } mdu_disk_info_t; 131 + 132 + typedef struct mdu_start_info_s { 133 + /* 134 + * configuration/status of one particular disk 135 + */ 136 + int major; 137 + int minor; 138 + int raid_disk; 139 + int state; 140 + 141 + } mdu_start_info_t; 142 + 143 + typedef struct mdu_bitmap_file_s 144 + { 145 + char pathname[4096]; 146 + } mdu_bitmap_file_t; 147 + 148 + typedef struct mdu_param_s 149 + { 150 + int personality; /* 1,2,3,4 */ 151 + int chunk_size; /* in bytes */ 152 + int max_fault; /* unused for now */ 153 + } mdu_param_t; 154 + 155 + #endif /* _UAPI_MD_U_H */