summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2021-08-13Utils: Change sprintf to snprintfHEADmasterMateusz Kusiak1-2/+2
Using sprintf can cause segmentation fault by exceeding the size of buffer array. Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-08-02Release mdadm-4.2-rc2Jes Sorensen6-9/+10
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-08-02Assemble: skip devices that don't match uuid instead of aborting the assembly.Sudhakar Panneerselvam1-0/+5
This fixes '03r0assem' test as assembly fails when looking for specific uuid among the device list. Signed-off-by: Sudhakar Panneerselvam <sudhakar.panneerselvam@oracle.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-08-02Add monitor delay parameter to mdadm.confoshchirs4-8/+46
Add possibility to configure delay for mdadm in monitoring mode using mdadm.conf. --delay command line argument takes precedence over config file. Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@intel.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-08-02tests: Avoid passing chunk size when creating RAID 1Mateusz Grzonka5-9/+14
Tests fail because passing chunk size for RAID 1 is now forbidden. Failing tests: - 14imsm-r1_2d-grow-r1_3d - 14imsm-r1_2d-takeover-r0_2d - 18imsm-1d-takeover-r1_2d - 18imsm-r1_2d-takeover-r0_1d Correct tests to not pass chunk size when RAID level is 1. Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-08-02Fix memory leak after "mdadm --detail"Mateusz Grzonka1-11/+9
Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-27Assemble: start dirty and degraded array.Mariusz Tkaczyk3-80/+103
The case when array is already degraded has been omitted by commit 7b99edab2834 ("Assemble.c: respect force flag."). Appropriative support has been added now. Handlers for "run" and "force" have been divided into independent routines. Especially force has to be as meaningless as possible. It respects following rules: - user agrees to start array as degraded (by --run) or is already degraded - raid456 module is in use - some drives are missing (to limit potential abuses) It doesn't allow to skip resync on dirty, but not degraded array. This patch cleans up message generation for external array and makes it consistent. Following code could be reused also for native. In current implementation assemble_container_content is called once, in both Incremental or Assembly mode. Thus makes that partial assembly is not likely to happen. It is possible, but requires user input. Partial assembly during reshape fails (sysfs_set_array error - not yet investigated). For now I put FIXME to mark current logic as known to be buggy because preexist_cnt contains both exp_cnt and new_cnt which may produce an incorrect message. Check for new disks and runstop is unnecessary, so has been removed. This allows to print assemble status in every case, even if nothing new happens. Reported-by: Devon Beets <devon@sigmalabsinc.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-27imsm: fix num_data_stripes after raid0 takeoverMariusz Tkaczyk1-62/+77
After raid1 to raid0 migration num_data_stripes value is incorrect because was additionally divided by 2. Create dedicated setters for num_data_stripes and num_domains and propagate it across the code to unify alghoritms and eliminate similar mistakes. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16Add error handling for chunk size in RAID1Mateusz Grzonka1-3/+2
Print error if chunk size is set as it is not supported. Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16imsm: Fix possible memory leaks and refactor freeing struct dlMateusz Grzonka1-20/+19
Free memory allocated by structs dl and intel_super. Allow __free_imsm_disk to decide if fd has to be closed and propagate it across code instead of direct struct dl freeing. Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16mdadm: Fix building errorsXiao Ni2-2/+2
In util.c, there is a building error: '/md/metadata_version' directive writing 20 bytes into a region of size between 0 and 255 [-Werror=format-overflow=] In mapfile.c It declares the fouth argument as 'int *' in map_update, but in mdadm.h it's previously declared as an array 'int[4]' Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16Don't associate spares with other arrays during RAID ExamineOleksandr Shchirskyi2-56/+20
Spares in imsm belong to containers, not volumes, and must go into a separate container when assembling the RAID. Remove association spares with other arrays and make Examine print separate containers for spares. Auto assemble without config file already works like this. So make creating a config file and assembling from it consistent with auto assemble. With this change, mdadm -Es will add this line to output if spares are found: ARRAY metadata=imsm UUID=00000000:00000000:00000000:00000000 Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16Remove Spare drives line from details for external metadataOleksandr Shchirskyi1-1/+2
Arrays with external metadata do not have spare disks directly assigned to volumes; spare disks belong to containers and are moved to arrays when the array is degraded/reshaping. Thus, the display of zero spare disks in volume details is incorrect and can be confusing. Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16imsm: correct offset for 4k disks in --examine outputOleksandr Shchirskyi1-1/+1
"Sector Offset" field in Examine output was always printed in 512 byte sectors. Update it to support 4096 sector size. Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16Use dev_open in validate geometry containerBlazej Kucman2-2/+2
Fix regression caused by the patch 1f5d54a06 ("Manage: Call validate_geometry when adding drive to external container") - mdmonitor passes to Manage() routine dev name as min:mjr. The open() used in validate_geometry_container() in both ddf and imsm requires path, replace open calls by dev_open, which allows to use dev path and min:mjr. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-07-16mdadm/super1: It needs to specify int32 for bitmap_offsetXiao Ni1-1/+1
For super1.0 bitmap offset is -16. So it needs to use int type for bitmap offset. Fixes: 1fe2e1007310 (mdadm/bitmap: locate bitmap calcuate bitmap position wrongly) Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-26Manage: Call validate_geometry when adding drive to external containerMariusz Tkaczyk3-16/+19
When adding drive to container call validate_geometry to verify whether drive is supported and can be addded to container. Remove unused parameters from validate_geometry_imsm_container(). There is no need to pass them. Don't calculate freesize if it is not mandatory. Make it configurable. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-26imsm: Limit support to the lowest namespaceMariusz Tkaczyk3-84/+123
First namespace existence is not quaranted by NVMe specification. Instead first the smallest one shall be chosen. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-26imsm: add devpath_to_char methodMariusz Tkaczyk3-18/+40
Add method for reading sysfs attributes and propagate it across IMSM code. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-26imsm: add generic method to resolve "device" linksMariusz Tkaczyk3-65/+77
Each virtual device is linked with parent by "device". This patch adds possibility to get previous device in sysfs tree. Depending on device type, there is a different amount of virutal layers. The best we can do is allow to directly specify how many "device" links need to be resolved. This approach also allows to get previous virtual device, which may contain some attributes. Simplify fd2devname, this function doesn't require new functionality and shall use generic fd2kname. For nvme drives represented via nvme-subystem when path to block device if requested, then return it without translation. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-06Prevent user from using --stop with ambiguous argsNorbert Szulc1-0/+5
When both --scan and device name is passed to --stop action, then is executed only for given device. Scan is ignored. Block the operation when both --scan and device name are passed. Signed-off-by: Norbert Szulc <norbert.szulc@intel.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-06Fix some building errorsXiao Ni1-3/+3
There are some building errors if treating warning as errors. Fix them in this patch. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-05-06imsm: change wrong size verificationMariusz Tkaczyk1-5/+5
Expectation that size is always rounded is incorrect. Just confirm that size is smaller to be certain that update is safe. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-04-14Release mdadm-4.2-rc1Jes Sorensen6-5/+29
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-04-14super-intel.c: Handle errors from calls to get_dev_sector_size()Jes Sorensen1-4/+10
The compiler gets rather upset if we do not take care of this. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-04-06mdadm: fix growing containersNigel Croxon1-8/+11
This fixes growing containers which was broken with commit 4ae96c802203ec3c (mdadm: fix reshape from RAID5 to RAID6 with backup file) The issue being that containers use the function wait_for_reshape_isms and expect a number value and not a string value of "max". The change is to test for external before setting the correct value. Signed-off-by: Nigel Croxon <ncroxon@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-19Monitor: make libudev dependency optionalMariusz Tkaczyk2-6/+29
Make -ludev configurable, enabled by default. To disable it, -DNO_LIBUDEV has to be set explicitly in CXFALGS. This patch restores commit cab9c67d461c ("mdmonitor: set small delay once") for configuration without libudev to bring minimal support in such case. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-18imsm: support for third Sata controllerMariusz Tkaczyk1-27/+31
Add new UEFI TSata variable. Remove CSata variable. This variable has been never exposed by UEFI. Remove vulnerability to match different hbas with SATA variable. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-16imsm: nvme multipath supportBlazej Kucman3-15/+104
Add support for nvme devices which are represented via nvme-subsystem. Print warning when multi-path disk is added to RAID. Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@intel.com> Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-16imsm: extend curr_migr_unit to u64Mariusz Tkaczyk1-41/+51
Make it u64 to align it with curr_migr_init field from migration_area. Name helpers as vol_curr_migr_unit for differentiation between those fields. Add ommited fillers in struct migr_record. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09Grow: Block reshape when external metadata and write-intent bitmapJakub Radtke1-9/+15
Current kernel sysfs interface for the bitmap is limited. It allows the applying of the bitmap on non-active volumes only. The reshape operation for a volume with a bitmap should be blocked. Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09Create: Block automatic enabling bitmap for external metadataJakub Radtke1-0/+1
For external metadata, bitmap should be added only when explicitly set by the administrator. They could be additional requirements to consider before enabling the external metadata's functionality (e.g., kernel support). Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09imsm: Update-subarray for write-intent bitmapJakub Radtke1-6/+17
The patch updates the current bitmap functionality to handle adding the bitmap on existing volumes. Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09Add "bitmap" to allowed command-line valuesJakub Radtke2-3/+14
Currently, the sysfs interface allows bitmap setup only when volume is in an inactive state. For external metadata to add bitmap to existing volume instead of GROW, the UPDATE operation can be done. The patch adds a "bitmap" argument to the allowed values for UPDATE. Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09imsm: Adding a spare to an existing array with bitmapJakub Radtke1-1/+36
When adding a spare to an existing array with bitmap, an additional initialization (adding bitmap header and preparing the bitmap area) is required. Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09imsm: Write-intent bitmap supportJakub Radtke1-2/+617
This patch enables the bitmap functionality with the IMSM metadata format. The functionality covers "internal" bitmap. There are the following limitation to "internal" metadata: - creating the bitmap using --grow is not supported - parameter --bitmap-chunk is ignored (default value 64MiB is used) Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09Enable bitmap support for external metadataJakub Radtke3-0/+22
The patch enables the implementation of a write-intent bitmap for external metadata. Configuration of the internal bitmaps for non-native metadata requires the extension in superswitch to perform an additional sysfs setup before the array is activated. Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-09Modify mdstat parsing for volumes with the bitmapJakub Radtke1-0/+6
Current mdstat read functionality is not working correctly for the volumes with the write-intent bitmap. It affects rebuild and reshape use cases. Signed-off-by: Jakub Radtke <jakub.radtke@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-08It should be FAILED when raid has not enough active disksXiao Ni1-4/+10
It can't remove the disk if there are not enough disks. For example, raid5 can't remove the second disk. If the second disk is unplug from machine, it's better show missing and the raid should be FAILED. It's better for administrator to monitor the raid. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-08imsm: add verbose flag to compare_superMariusz Tkaczyk8-16/+23
IMSM does more than comparing metadata and errors reported directly from compare_super_imsm can be useful. Add verbose flag to compare_super method and make all not critical error printing configurable. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-08mdmonitor: check if udev has finished events processingOleksandr Shchirskyi2-12/+65
If mdmonitor is awaken by event, wait for udev to finish events processing, to eliminate the race between udev and mdadm when spare has been added and need to be moved by mdmonitor Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-08Document PPL in man mdOleksandr Shchirskyi1-15/+29
Partial Parity Log (PPL) was not documented in the man md. Added brief info about PPL. Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-08imsm: use saved fds during migrationMariusz Tkaczyk1-154/+54
IMSM super keeps open descriptors in super->disks structure, they are reliable and should be chosen if possible. The repeatedly called open and close during reshape generates redundant udev change events on each member drive. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-03super1.c: avoid useless sync when bitmap switches from clustered to noneZhao Heming1-0/+2
With kernel commit 480523feae58 ("md: only call set_in_sync() when it is expected to succeed."), mddev->in_sync in clustered array is always zero. It makes metadata resync_offset to always zero. When assembling a clusterd array with "-U no-bitmap" option, kernel md layer "mddev->resync_offset == 0" and "mddev->bitmap == NULL" will trigger raid1 do sync on every bitmap chunk. the sync action is useless, we should avoid it. Related kernel flow: ``` md_do_sync mddev->pers->sync_request raid1_sync_request md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, 1) __bitmap_start_sync(bitmap, offset,&blocks1, degraded) if (bitmap == NULL) {/* FIXME or bitmap set as 'failed' */ *blocks = 1024; return 1; /* always resync if no bitmap */ } ``` Reprodusible steps: ``` node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sd{a,b} node1 # mdadm -Ss (in another shell, executing & watching: watch -n 1 'cat /proc/mdstat') node1 # mdadm -A -U no-bitmap /dev/md0 /dev/sd{a,b} ``` Signed-off-by: Zhao Heming <heming.zhao@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-03super1: fix Floating point exceptionZhao Heming1-1/+4
write_bitmap1 didn't check return value of locate_bitmap1, which will operate bitmap area under invalid bitmap info. mdadm core dumped when doing below steps: ``` node1 # mdadm -C /dev/md0 -b none -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb node1 # mdadm -Ss node1 # mdadm -A -U home-cluster --home-cluster=abc /dev/md0 /dev/sda /dev/sdb Floating point exception (core dumped) ``` Signed-off-by: Zhao Heming <heming.zhao@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-03Grow: be careful of corrupt dev_roles listNeilBrown2-13/+50
I've seen a case where the dev_roles list of a linear array was corrupt. ->max_dev was > 128 and > raid_disks, and the extra slots were '0', not 0xFFFE or 0xFFFF. This caused problems when a 128th device was added. So: 1/ make Grow_Add_device more robust so that if numbers look wrong, it fails-safe. 2/ make examine_super1() report details if the dev_roles array is corrupt. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-03mdadm: fix reshape from RAID5 to RAID6 with backup fileNigel Croxon1-2/+5
Reshaping a 3-disk RAID5 to 4-disk RAID6 will cause a hang of the resync after the grow. Adding a spare disk to avoid degrading the array when growing is successful, but not successful when supplying a backup file on the command line. If the reshape job is not already running, set the sync_max value to max. Signed-off-by: Nigel Croxon <ncroxon@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2021-03-03mdadm/bitmap: locate bitmap calcuate bitmap position wronglyXiao Ni1-3/+9
Now it only adds bitmap offset based on cluster nodes. It's not right. It needs to add per node bitmap space to find next node bitmap position. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-12-20Dump: get stat from a wrong metadata file when restoring metadataLidong Zhong1-0/+5
The dumped metadata files are shown as below localhost:~ # ll -ih test/ total 16K 34565564 -rw-r--r-- 2 root root 1.0G Dec 14 21:15 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 34565563 -rw-r--r-- 2 root root 1.0G Dec 14 21:15 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 34565563 -rw-r--r-- 2 root root 1.0G Dec 14 21:15 sda 34565564 -rw-r--r-- 2 root root 1.0G Dec 14 21:15 sdb It reports such error when trying to restore metadata for /dev/sda localhost:~ # mdadm --restore=test /dev/sda mdadm: test/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 is not the same size as /dev/sda - cannot restore. It's because the stb value has been changed to other metadata file in the while statement. Signed-off-by: Lidong Zhong <lidong.zhong@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-12-20Incremental: Remove redundant spare movement logicMariusz Tkaczyk1-62/+0
If policy is set then mdmonitor is responsible for moving spares. This logic is reduntant and potentialy dangerus, spare could be moved at initrd stage depending on drives appearance order. Remove it. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-11-25udev: start grow service automaticallyTkaczyk Mariusz1-0/+2
Grow continue via service or fork is started during raid assembly. If raid was assembled in initrd it will be newer restarted after switch root. Add udev support for starting mdadm-grow-continue service. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
2020-11-25Make target to install binaries onlyKinga Tanska1-3/+5
Make install causes installation of binaries, udev and man. This commit contains new target make install-bin, which results in installation of binaries only. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
2020-11-25mdadm/Detail: show correct state for clustered arrayZhao Heming3-10/+86
After kernel md module commit 480523feae581, in clustered env, mddev->in_sync always zero, it will make array.state never set up MD_SB_CLEAN. it causes "mdadm -D /dev/mdX" show state 'active' all the time. bitmap.c: add a new API IsBitmapDirty() to support inquiry bitmap dirty or clean. Signed-off-by: Zhao Heming <heming.zhao@suse.com>
2020-11-25mdadm: Unify forks behaviourMariusz Tkaczyk6-101/+100
If mdadm is run by udev or systemd, it gets a pipe as each stream. Forks in the background may run after an event or service has been processed when udev is detached from pipe. As a result process fails quietly if any message is written. To prevent from it, each fork has to close all parent streams. Leave stderr and stdout opened only for debug purposes. Unify it across all forks. Introduce other descriptors detection by scanning /proc/self/fd directory. Add generic method for managing systemd services. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
2020-11-25imsm: limit support to first NVMe namespaceMariusz Tkaczyk3-1/+42
Due to metadata limitations NVMe multinamespace support has to be removed. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
2020-11-25Monitor: don't use default modes when creating a fileMariusz Tkaczyk1-5/+12
Replace fopen() calls by open() with creation mode directly specified. This fixes the potential security issue. Use octal values instead masks. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
2020-11-25imsm: remove redundant calls to imsm_get_mapMariusz Tkaczyk1-2/+0
MAP_0 is gotten and the beginning, there is no need to get it again. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
2020-11-25imsm: update num_data_stripes according to dev_sizeMariusz Tkaczyk1-6/+78
If array was created in UEFI there is possibility that member size is not rounded to 1MB. After any size reconfiguration it will be rounded down to 1MB per each member but the old component size will remain in metadata. During reshape old array size is calculated from component size because dev_size is not a part of map and is bumped to new value quickly. It may result in size mismatch if array is assembled during reshape. If difference in calculated size and dev_size is observed try to fix it. num_data_stripes value can be safety updated to smaller value if array doesn't occuppy whole reserved component space. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
2020-11-25Create.c: close mdfd and generate ueventMariusz Tkaczyk1-5/+2
During mdfd closing change event is not generated because open() is called before start watching mddevice by udev. Device is ready at this stage. Unblock device, close fd and generate event to give a chance next layers to work. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
2020-11-25Detail: fix segfault during IMSM raid creationLidong Zhong1-1/+1
It can be reproduced with non IMSM hardware and IMSM_NO_PLATFORM environmental variable set. The array state is inactive when creating an IMSM container. And the structure info is NULL because load_super() always fails since no intel HBA information could be obtained. Signed-off-by: Lidong Zhong <lidong.zhong@suse.com> Reported-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Fixes: 64bf4dff3430 (Detail: show correct raid level when the array is inactive)
2020-10-14Super1: allow RAID0 layout setting to be removed.NeilBrown4-5/+34
Once the RAID0 layout has been set, the RAID0 array cannot be assembled on an older kernel which doesn't understand layouts. This is an intentional safety feature, but sometimes people need the ability to roll-back to a previously working configuration. So add "--update=layout-unspecified" to remove RAID0 layout information from the superblock. Running "--assemble --update=layout-unspecified" will cause the assembly the fail when run on a newer kernel, but will allow it to work on an older kernel. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-10-14Check if other Monitor instance running before fork.Blazej Kucman1-16/+28
Make error message visible to the user. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-10-14mdmonitor: set small delay onceBlazej Kucman3-5/+29
If mdmonitor is awakened by event, set small delay once to deal with udev and mdadm. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-10-14Monitor: stop notifing about containers.Mariusz Tkaczyk1-3/+16
Stop reporting any events from container but still track them, it is important for spare migration. Stop mdmonitor if no redundant array is presented in mdstat. There is nothing to follow. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-10-14Monitor: refresh mdstat fd after selectMariusz Tkaczyk2-5/+5
After 52209d6ee118 ("Monitor: release /proc/mdstat fd when no arrays present") mdstat fd is closed if mdstat is empty or cannot be opened. It causes that monitor is not able to select on mdstat. Select doesn't fail because it gets valid descriptor to a different resource. As a result any new event will be unnoticed until timeout (delay). Refresh mdstat after wake up, don't poll on wrong resource. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-10-14Don't create bitmap for raid5 with journal diskXiao Ni1-0/+1
Journal disk and bitmap can't exist at the same time. It needs to check if the raid has a journal disk when creating bitmap. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-10-14Detail: show correct raid level when the array is inactiveLidong Zhong1-1/+4
Sometimes the raid level in the output of `mdadm -D /dev/mdX` is misleading when the array is in inactive state. Here is a testcase for introduction. 1\ creating a raid1 device with two disks. Specify a different hostname rather than the real one for later verfication. node1:~ # mdadm --create /dev/md0 --homehost TESTARRAY -o -l 1 -n 2 /dev/sdb /dev/sdc 2\ remove one of the devices and reboot 3\ show the detail of raid1 device node1:~ # mdadm -D /dev/md127 /dev/md127: Version : 1.2 Raid Level : raid0 Total Devices : 1 Persistence : Superblock is persistent State : inactive Working Devices : 1 You can see that the "Raid Level" in /dev/md127 is raid0 now. After step 2\ is done, the degraded raid1 device is recognized as a "foreign" array in 64-md-raid-assembly.rules. And thus the timer to activate the raid1 device is not triggered. The array level returned from GET_ARRAY_INFO ioctl is 0. And the string shown for "Raid Level" is str = map_num(pers, array.level); And the definition of pers is mapping_t pers[] = { { "linear", LEVEL_LINEAR}, { "raid0", 0}, { "0", 0} ... So the misleading "raid0" is shown in this testcase. Changelog: v1: don't show "Raid Level" when array is inactive Signed-off-by: Lidong Zhong <lidong.zhong@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-08-07manual: update --examine-badblocksMariusz Tkaczyk1-2/+4
IMSM also supports it. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-08-07mdadm/md.4: update path to in-kernel-tree documentationWinston Weinert1-1/+1
Documentation/md.txt was renamed to Documentation/admin-guide/md.rst in linux commit 9d85025b0418163fae079c9ba8f8445212de8568 (Oct 26, 2016). Signed-off-by: Winston Weinert <winston@ml1.net> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-08-07Specify nodes number when updating cluster nodesXiao Ni1-0/+5
Now it allows updating cluster nodes without specify --nodes. It can write superblock with zero nodes. It can break the current cluster. Add this check to avoid this problem. v2: It needs check c.update first to avoid NULL pointer reference v3: Wol points the typo error Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-06-18mdadm/Grow: prevent md's fd from being occupied during delayed timeallenpeng1-1/+1
If we start reshaping on md which shares sub-devices with another resyncing md, it may be forced to wait for others to complete. mdadm occupies the md's fd during this time, which causes the md can not be stopped and the filesystem can not be mounted on the md. We can close md's fd earlier to solve this problem. Reproducible Steps: 1. create two partitions on sda, sdb, sdc, sdd 2. create raid1 with sda1, sdb1 mdadm -C /dev/md1 --assume-clean -l1 -n2 /dev/sda1 /dev/sdb1 3. create raid5 with sda2, sdb2, sdc2 mdadm -C /dev/md2 --assume-clean -l5 -n3 /dev/sda2 /dev/sdb2 /dev/sdc2 4. start resync at md1 echo repair > /sys/block/md1/md/sync_action 5. reshape raid5 to raid6 mdadm -a /dev/md2 /dev/sdd2 mdadm --grow /dev/md2 -n4 -l6 --backup-file=/root/md2-backup Now mdadm is occupying the fd of md2, causing md2 unable to be stopped 6.Try to stop md2, an error message shows mdadm -S /dev/md2 mdadm: Cannot get exclusive access to /dev/md3:Perhaps a running process, mounted filesystem or active volume group? Reviewed-by: Alex Wu <alexwu@synology.com> Reviewed-by: BingJing Chang <bingjingc@synology.com> Reviewed-by: Danny Shih <dannyshih@synology.com> Signed-off-by: ChangSyun Peng <allenpeng@synology.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-06-12Update link to Intel page for IMSMJes Sorensen1-1/+1
The old design page is gone, so update to the current overview page. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-06-12Use more secure HTTPS URLsPaul Menzel6-9/+9
All URLs in the source are available over HTTPS, so convert all URLs to HTTPS with the command below. git grep -l 'http://' | xargs sed -i 's,http://,https://,g' Revert the changes to announcement files `ANNOUNCE-*` as requested by the maintainer. Cc: linux-raid@vger.kernel.org Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-06-05Detect too-small device: error rather than underflow/crashDavid Favro1-5/+14
For 1.x metadata, when the user requested creation of an array on component devices that were too small even to hold the superblock, an undetected integer wraparound (underflow) resulted in an enormous computed size which resulted in various follow-on errors such as floating-point exception. This patch detects this condition, prints a reasonable diagnostic message, and refuses to continue. Signed-off-by: David Favro <dfavro@meta-dynamic.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-06-05Block overwriting existing links while manual assemblyKinga Tanska1-0/+4
Manual assembly with existing link caused overwriting this link. Add checking link and block this situation. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-18restripe: fix ignoring return value of ‘read’ and lseekGuoqing Jiang1-2/+10
Got below error when run "make everything". restripe.c: In function ‘test_stripes’: restripe.c:870:4: error: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Werror=unused-result] read(source[i], stripes[i], chunk_size); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fix it by check the return value of ‘read’, and free memory in the failure case. And check the return value of lseek as well per Jes's comment. Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-18Include count for \0 character when using strncpy to implement strdup.Jes Sorensen1-1/+1
We have to include the \0 character in the length when copying a string with strncpy() for which length was found with strlen(). Otherwise the destination will not get null terminated - except that we explicitly zeroed it out earlier. This quiets down the compiler's warnings. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-18uuid.c: split uuid stuffs from util.cGuoqing Jiang3-90/+115
Currently, 'make raid6check' is build broken since commit b06815989 ("mdadm: load default sysfs attributes after assemblation"). /usr/bin/ld: sysfs.o: in function `sysfsline': sysfs.c:(.text+0x2707): undefined reference to `parse_uuid' /usr/bin/ld: sysfs.c:(.text+0x271a): undefined reference to `uuid_zero' /usr/bin/ld: sysfs.c:(.text+0x2721): undefined reference to `uuid_zero' Apparently, the compile of mdadm or raid6check are coupled with uuid functions inside util.c. However, we can't just add util.o to CHECK_OBJS which raid6check is needed, because it caused other worse problems. So, let's introduce a uuid.c file which is indenpended file to fix the problem, all the contents are splitted from util.c. Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-15Makefile: add EXTRAVERSION supportTkaczyk Mariusz2-2/+6
Add optional EXTRAVERSION parameter to Makefile and allow to mark version by user friendly label. It might be useful when creating custom spins of mdadm, or labeling some instance in between major releases. Signed-off-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-14mdcheck: Log when doneDonald Buczek1-0/+2
Currently mdcheck (when called with `--duration`) logs only the beginning of the check, the pausing and the continuation but not the completion. So, log the completion, too, so that it can be determined how long the raid check took. 2020-05-08T18:00:02+02:00 deadpool root: mdcheck start checking /dev/md0 2020-05-08T18:00:02+02:00 deadpool root: mdcheck start checking /dev/md1 2020-05-09T15:32:04+02:00 deadpool root: mdcheck finished checking /dev/md1 2020-05-09T17:38:04+02:00 deadpool root: mdcheck finished checking /dev/md0 Cc: linux-raid@vger.kernel.org Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-14Assemble.c: respect force flag.Mariusz Tkaczyk1-13/+38
If the array is dirty handler will set resync_start to 0 to inform kernel that resync is needed. RWH affects only raid456 module, for other levels array will be started even array is degraded and resync cannot be performed. Force is really meaningful for raid456. If array is degraded and resync is requested, kernel will reject an attempt to start the array. To respect force, it has to be marked as clean (this will be done for each array without PPL) and remove the resync request (only for raid 456). Data corruption may occur so proper warning is added. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-05-05clean up meaning of small typoNigel Croxon1-1/+1
Clean up the typo which leads to wrong understanding. Signed-off-by: Nigel Croxon <ncroxon@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-04-27Assemble: print error message if mdadm fails assembling with --uuid optionGioh Kim1-1/+1
When mdadm tries to assemble one working device and one zeroed-out device, it failed but print successful message because there is --uuid option. Following script always reproduce it. dd if=/dev/zero of=/dev/ram0 oflag=direct dd if=/dev/zero of=/dev/ram1 oflag=direct ./mdadm -C /dev/md111 -e 1.2 --uuid="12345678:12345678:12345678:12345678" \ -l1 -n2 /dev/ram0 /dev/ram1 ./mdadm -S /dev/md111 dd if=/dev/zero of=/dev/ram1 oflag=direct ./mdadm -A /dev/md111 --uuid="12345678:12345678:12345678:12345678" \ /dev/ram0 /dev/ram1 Following is message from mdadm. mdadm: No super block found on /dev/ram1 (Expected magic a92b4efc, got 00000000) mdadm: no RAID superblock on /dev/ram1 mdadm: /dev/md111 assembled from 1 drive - need all 2 to start it (use --run to insist). The mdadm say that it assembled but mdadm does not create /dev/md111. The message is wrong. After applying this patch, mdadm reports error correctly as following. mdadm: No super block found on /dev/ram1 (Expected magic a92b4efc, got 00000000) mdadm: no RAID superblock on /dev/ram1 mdadm: /dev/ram1 has no superblock - assembly aborted Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-04-27Manage, imsm: Write metadata before addTkaczyk Mariusz2-28/+44
New drive in container always appears as spare. Manager is able to handle that, and queues appropriative update to monitor. No update from mdadm side has to be processed, just insert the drive and ping the mdmon. Metadata has to be written if no mdmon is running (case for Raid0 or container without arrays). If bare drive is added very early on startup (by custom bare rule), there is possiblity that mdmon was not restarted after switch root. Old one is not able to handle new drive. New one fails because there is drive without metadata in container and metadata cannot be loaded. To prevent this, write spare metadata before adding device to container. Mdmon will overwrite it (same case as spare migration, if drive appears it writes the most recent metadata). Metadata has to be written only on new drive before sysfs_add_disk(), don't race with mdmon if running. Signed-off-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-04-27Detail: adding sync status for cluster deviceLidong Zhong3-4/+10
On the node with /proc/mdstat is Personalities : [raid1] md0 : active raid1 sdb[4] sdc[3] sdd[2] 1046528 blocks super 1.2 [3/2] [UU_] recover=REMOTE bitmap: 1/1 pages [4KB], 65536KB chunk Let's change the 'State' of 'mdadm -Q -D' accordingly State : clean, degraded With this patch, it will be State : clean, degraded, recovering (REMOTE) Signed-off-by: Lidong Zhong <lidong.zhong@suse.com> Acked-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-04-27Monitor: improve check_one_sharer() for checking duplicated processColy Li1-12/+20
When running mdadm monitor with scan mode, only one autorebuild process is allowed. check_one_sharer() checks duplicated process by following steps, 1) Read autorebuild.pid file, - if file does not exist, no duplicated process, go to 3). - if file exists, continue to next step. 2) Read pid number from autorebuild.pid file, then check procfs pid directory /proc/<PID>, - if the directory does not exist, no duplicated process, go to 3) - if the directory exists, print error message for duplicated process and exit this mdadm. 3) Write current pid into autorebuild.pid file, continue to monitor in scan mode. The problem for the above step 2) is, if after system reboots and another different process happens to have exact same pid number which autorebuild.pid file records, check_one_sharer() will treat it as a duplicated mdadm process and returns error with message "Only one autorebuild process allowed in scan mode, aborting". This patch tries to fix the above same-pid-but-different-process issue by one more step to check the process command name, 1) Read autorebuild.pid file - if file does not exist, no duplicated process, go to 4). - if file exists, continue to next step. 2) Read pid number from autorebuild.pid file, then check procfs file comm with the specific pid directory /proc/<PID>/comm - if the file does not exit, it means the directory /proc/<PID> does not exist, go to 4) - if the file exits, continue next step 3) Read process command name from /proc/<PIC>/comm, compare the command name with "mdadm" process name, - if not equal, no duplicated process, goto 4) - if strings are equal, print error message for duplicated process and exit this mdadm. 4) Write current pid into autorebuild.pid file, continue to monitor in scan mode. Now check_one_sharer() returns error for duplicated process only when the recorded pid from autorebuild.pid exists, and the process has exact same command name as "mdadm". Reported-by: Shinkichi Yamazaki <shinkichi.yamazaki@suse.com> Signed-off-by: Coly Li <colyli@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-04-27udev: Ignore change event for imsmMariusz Tkaczyk1-1/+1
When adding a device to a container mdadm has to close its file descriptor before sysfs_add_disk(). This generates change event. There is race possibility because metadata is already written and other -I process can place drive differently. As a result device can be added to two containers simultaneously. From IMSM perspective there is no need to react for change event. IMSM doesn't support stacked devices. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-03-17imsm: show Subarray and Volume ID in --examine outputArtur Paszkiewicz1-0/+3
Show the index of the subarray as 'Subarray' and the value of the my_vol_raid_dev_num field as 'Volume ID'. Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-03-17imsm: support the Array Creation Time field in metadataArtur Paszkiewicz1-2/+9
Also present its value in --examine and --examine --export. Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-03-16Detail: show correct bitmap info for cluster raid deviceLidong Zhong1-1/+3
Signed-off-by: Lidong Zhong <lidong.zhong@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-03-12imsm: Correct minimal device size.Blazej Kucman1-1/+4
Check if given size of member drive is not less than 1 MibiByte. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-02-24imsm: Remove --dump/--restore implementationBlazej Kucman1-56/+0
Functionalities --dump and --restore are not supported. Remove dead code from imsm. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-02-24imsm: pass subarray id to kill_subarray functionBlazej Kucman4-8/+8
After patch b6180160f ("imsm: save current_vol number") current_vol for imsm is not set and kill_subarray() cannot determine which volume has to be deleted. Volume has to be passed as "subarray_id". The parameter affects only IMSM metadata. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-02-24Remove the legacy whitespaceXiao Ni3-3/+3
The whitespace between Environment= and the true value causes confusion. To avoid confusing other people in future, remove the whitespace to keep it a simple, unambiguous syntax Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-02-24mdadm.8: add note information for raid0 growing operationColy Li1-0/+6
When growing a raid0 device, if the new component disk size is not big enough, the grow operation may fail due to lack of backup space. The minimum backup space should be larger than: LCM(old, new) * chunk-size * 2 where LCM() is the least common multiple of the old and new count of component disks, and "* 2" comes from the fact that mdadm refuses to use more than half of a spare device for backup space. There are users reporting such failure when they grew a raid0 array with small component disk. Neil Brown points out this is not a bug and how the failure comes. This patch adds note information into mdadm(8) man page in the Notes part of GROW MODE section to explain the minimum size requirement of new component disk size or external backup size. Reviewed-by: Petr Vorel <pvorel@suse.cz> Cc: NeilBrown <neilb@suse.de> Cc: Jes Sorensen <jsorensen@fb.com> Cc: Paul Menzel <pmenzel@molgen.mpg.de> Cc: Wols Lists <antlists@youngman.org.uk> Cc: Nix <nix@esperi.org.uk> Signed-off-by: Coly Li <colyli@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-01-21imsm: fill working_disks according to metadata.Blazej Kucman2-6/+8
Imsm tracks as "working_disk" each visible drive. Assemble routine expects that the value will return count of active member drives recorded in metadata. As a side effect "--no-degraded" doesn't work correctly for imsm. Align this field to others. Added check, if the option --no-degraded is called with --scan. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-01-21Add support for TebibytesKinga Tanska2-24/+43
Adding support for Tebibytes enables display size of volumes in Tebibytes and Terabytes when they are bigger than 2048 GiB (or GB). Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-01-16imsm: Update grow manual.Blazej Kucman1-6/+2
Update --grow option description in manual, according to the supported grow operations by IMSM. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-01-16mdcheck service can't start succesfully because of syntax errorXiao Ni2-2/+2
It reports error when starting mdcheck_start and mdcheck_continue service. Invalid environment assignment, ignoring: MDADM_CHECK_DURATION="6 hours" Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-01-16Change warning messageKinga Tanska1-1/+2
In commit 039b7225e6 ("md: allow creation of mdNNN arrays via md_mod/parameters/new_array") support for name like mdNNN was added. Special warning, when kernel is unable to handle request, was added in commit 7105228e19 ("mdadm/mdopen: create new function create_named_array for writing to new_array"), but it was not adequate enough, because in this situation mdadm tries to do it in old way. This commit changes warning to be more relevant when creating RAID container with "/dev/mdNNN" name and mdadm back to old approach. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2020-01-16Respect $(CROSS_COMPILE) when $(CC) is the defaultdann frazier1-1/+3
Commit 1180ed5 told make to only respect $(CROSS_COMPILE) when $(CC) was unset. But that will never be the case, as make provides a default value for $(CC). Change this logic to respect $(CROSS_COMPILE) when $(CC) is the default. Patch originally by Helmet Grohne. Fixes: 1180ed5 ("Makefile: make the CC definition conditional") Signed-off-by: dann frazier <dann.frazier@canonical.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-12-02Assemble: add support for RAID0 layouts.NeilBrown5-1/+47
If you have a RAID0 array with varying sized devices on a kernel before 5.4, you cannot assembling it on 5.4 or later without explicitly setting the layout. This is now possible with --update=layout-original (For 3.13 and earlier kernels) or --update=layout-alternate (for 3.14 and later kernels) Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-12-02Create: add support for RAID0 layouts.NeilBrown9-3/+121
Since Linux 5.4 a layout is needed for RAID0 arrays with varying device sizes. This patch makes the layout of an array visible (via --examine) and sets the layout on newly created arrays. --layout=dangerous can be used to avoid setting a layout so that they array can be used on older kernels. Tested-by: dann frazier <dann.frazier@canonical.com> Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-12-02imsm: Change the way of printing nvme drives in detail-platform.Blazej Kucman1-51/+46
Change NVMe controller path to device node path in mdadm --detail-platform and print serial number. The method imsm_read_serial always trimes serial to MAX_RAID_SERIAL_LEN, added parameter 'serial_buf_len' will be used to check the serial fit to passed buffor, if not, will be trimed. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-12-02imsm: return correct uuid for volume in detailBlazej Kucman6-12/+30
Fixes the side effect of the patch b6180160f ("imsm: save current_vol number") - wrong UUID is printed in detail for each volume. New parameter "subarray" is added to determine what info should be extracted from metadata (subarray or container). The parameter affects only IMSM metadata. Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-12-02Remove unused codeXiao Ni1-1/+0
Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-27Fix up a few formatting issuesJes Sorensen1-4/+9
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-27Remove last traces of HOT_ADD_DISKJes Sorensen2-3/+0
This ioctl is no longer used, so remove all references to it. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-27Manage: Remove the legacy code for md driver prior to 0.90.03Xiao Yang1-12/+0
Previous re-add operation only calls ioctl(HOT_ADD_DISK) for array without metadata(e.g. mdadm -B/--build) when md driver is less than 0.90.02, but commit 091e8e6 breaks the logic and current re-add operation can call ioctl(HOT_ADD_DISK) even if md driver is 0.90.03. This issue is reproduced by 05r1-re-add-nosuper: ------------------------------------------------ ++ die 'resync or recovery is happening!' ++ echo -e '\n\tERROR: resync or recovery is happening! \n' ERROR: resync or recovery is happening! ------------------------------------------------ Fixes: 091e8e6("Manage: Remove all references to md_get_version()") Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Xiao Yang <ice_yangxiao@163.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-12super-intel: don't mark structs 'packed' unnecessarilyNeilBrown1-6/+26
super-intel marks a number of structures 'packed', but this doesn't change the layout - they are already well organized. This is a problem a gcc warns when code takes the address of a field in a packet struct - as super-intel sometimes does. So remove the marking where isn't needed. Do ensure this does introduce a regression, add a compile-time assertion that the size of the structure is exactly the value it had before the 'packed' notation was removed. Note that a couple of structure do need to be packed. As the address of fields is never taken, that is safe. Signed-off-by: NeilBrown <neilb@suse.de> Acked-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-12SUSE-mdadm_env.sh: handle MDADM_CHECK_DURATIONNeilBrown1-0/+3
The suse sysconfig/mdadm allows MDADM_CHECK_DURATION to be set, but it is currently ignored. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-12mdcheck: use ${} to pass variable to mdcheckNeilBrown2-5/+4
$MDADM_CHECK_DURATION allows the value to be split on spaces. ${MDADM_CHECK_DURATION} avoids such splitting. Making this change removes the need for double quoting when setting the default Environment, and means that double quoting isn't needed in the EnvironmentFile. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-12mdcheck: when mdcheck_start is enabled, enable mdcheck_continue too.NeilBrown2-0/+3
mdcheck_continue continues a regular array scan that was started by mdcheck_start. mdcheck_start will ensure that mdcheck_continue is active. Howver if you reboot after a check has started, but before it finishes, then mdcheck_continue won't cause it to continue, because nothing starts it on boot. So add an install option for mdcheck_contine, and make sure it gets enabled when mdcheck_start is enabled. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-11-12imsm: allow to specify second volume sizeKrzysztof Smolinski1-10/+4
Removed checks which limited second volume size only to max value (the largest size that fits on all current drives). It is now permitted to create second volume with size lower then maximum possible. Signed-off-by: Krzysztof Smolinski <krzysztof.smolinski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-10-04imsm: save current_vol numberMariusz Tkaczyk1-0/+2
The imsm container_content routine will set curr_volume index in super for getting volume information. This flag has never been restored to original value, later other function may rely on it. Restore this flag to original value. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-10-01udev: allow for udev attribute reading bug.NeilBrown1-1/+1
There is a bug in udev (which will hopefully get fixed, but we should allow for it anways). When reading a sysfs attribute, it first reads the whole value of the attribute, then reads again expecting to get a read of 0 bytes, like you would with an ordinary file. If the sysfs attribute changed between these two reads, it can get a mixture of two values. In particular, if it reads when 'array_state' is changing from 'clear' to 'inactive', it can find the value as "clear\nve". This causes the test for "|clear|active" to fail, so systemd is allowed to think that the array is ready - when it isn't. So change the pattern to allow for this but adding a wildcard at the end. Also don't allow for an empty string - reading array_state will never return an empty string - if it exists at all, it will be non-empty. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-09-30Don't need to check recovery after re-add when no I/O writes to raidXiao Ni1-2/+0
If there is no write I/O between removing member disk and re-add it, there is no recovery after re-adding member disk. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-09-30Init devlist as an arrayXiao Ni1-0/+3
devlist is an string. It will change to an array if there is disk that is sbd disk. If one device is sbd, it runs devlist=(). This line code changes devlist from a string to an array. If there is no sbd device, it can't run this line code. So it will still be a string. The later codes need an array, rather than an string. So init devlist as an array to fix this problem. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-09-30mdadm/md.4: add the descriptions for bitmap sysfs nodesGuoqing Jiang1-0/+69
The sysfs nodes under bitmap are not recorded in md.4, add them based on md.rst and kernel source code. Cc: NeilBrown <neilb@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-09-30mdadm: force a uuid swap on big endianNigel Croxon1-0/+4
The code path for metadata 0.90 calls a common routine fname_from_uuid that uses metadata 1.2. The code expects member swapuuid to be setup and usable. But it is only setup when using metadata 1.2. Since the metadata 0.90 did not create swapuuid and set it. The test (st->ss == &super1) ? 1 : st->ss->swapuuid fails. The swapuuid is set at compile time based on byte order. Any call based on metadata 0.90 and on big endian processors, the --export uuid will be incorrect. Signed-Off-by: Nigel Croxon <ncroxon@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-09-30mdadm: Introduce new array state 'broken' for raid0/linearGuilherme G. Piccoli6-7/+23
Currently if a md raid0/linear array gets one or more members removed while being mounted, kernel keeps showing state 'clean' in the 'array_state' sysfs attribute. Despite udev signaling the member device is gone, 'mdadm' cannot issue the STOP_ARRAY ioctl successfully, given the array is mounted. Nothing else hints that something is wrong (except that the removed devices don't show properly in the output of mdadm 'detail' command). There is no other property to be checked, and if user is not performing reads/writes to the array, even kernel log is quiet and doesn't give a clue about the missing member. This patch is the mdadm counterpart of kernel new array state 'broken'. The 'broken' state mimics the state 'clean' in every aspect, being useful only to distinguish if an array has some member missing. All necessary paths in mdadm were changed to deal with 'broken' state, and in case the tool runs in a kernel that is not updated, it'll work normally, i.e., it doesn't require the 'broken' state in order to work. Also, this patch changes the way the array state is showed in the 'detail' command (for raid0/linear only) - now it takes the 'array_state' sysfs attribute into account instead of only rely in the MD_SB_CLEAN flag. Cc: Jes Sorensen <jes.sorensen@gmail.com> Cc: NeilBrown <neilb@suse.de> Cc: Song Liu <songliubraving@fb.com> Signed-off-by: Guilherme G. Piccoli <gpiccoli@canonical.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-08-16mdadm: check value returned by snprintf against errorsKrzysztof Smolinski1-2/+10
GCC 8 checks possible truncation during snprintf more strictly than GCC 7 which result in compilation errors. To fix this problem checking result of snprintf against errors has been added. Signed-off-by: Krzysztof Smolinski <krzysztof.smolinski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-08-14imsm: close removed drive fd.Mariusz Tkaczyk1-0/+3
When member drive fails, managemon prepares metadata update and adds the drive to disk_mgmt_list with DISK_REMOVE flag. It fills only minor and major. It is enough to recognize the device later. Monitor thread while processing this update will remove the drive from super only if it is a spare. It never removes failed member from disks list. As a result, it still keeps opened descriptor to non-existing device. If removed drive is not a spare fill fd in disk_cfg structure (prepared by managemon), monitor will close fd during freeing it. Also set this drive fd to -1 in super to avoid double closing because monitor will close the fd (if needed) while replacing removed drive in array. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-08-12udev: add --no-devices option for calling 'mdadm --detail'Coly Li1-1/+1
When creating symlink of a md raid device, the detailed information of component disks are unnecessary for rule udev-md-raid-arrays.rules. For md raid devices with huge number of component disks (e.g. 1500 DASD disks), the detail information of component devices can be very large and exceed udev monitor's on-stack message buffer. This patch adds '--no-devices' option when calling mdadm by, IMPORT{program}="BINDIR/mdadm --detail --no-devices --export $devnode" Now the detailed output won't include component disks information, and the error message "invalid message length" reported by systemd can be removed. Signed-off-by: Coly Li <colyli@suse.de> Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-08-12mdadm: add --no-devices to avoid component devices detail informationColy Li4-8/+23
When people assemble a md raid device with a large number of component deivces (e.g. 1500 DASD disks), the raid device detail information generated by 'mdadm --detail --export $devnode' is very large. It is because the detail information contains information of all the component disks (even the missing/failed ones). In such condition, when udev-md-raid-arrays.rules is triggered and internally calls "mdadm --detail --no-devices --export $devnode", user may observe systemd error message ""invalid message length". It is because the following on-stack raw message buffer in systemd code is not big enough, systemd/src/libudev/libudev-monitor.c _public_ struct udev_device *udev_monito ... struct ucred *cred; union { struct udev_monitor_netlink_header nlh; char raw[8192]; } buf; Even change size of raw[] from 8KB to larger size, it may still be not enough for detail message of a md raid device with much larger number of component devices. To fix this problem, an extra option '--no-devices' is added (the original idea is proposed by Neil Brown). When printing detailed information of a md raid device, if '--no-devices' is specified, then all component devices information will not be printed, then the output message size can be restricted to a small number, even with the systemd only has 8KB on-disk raw buffer, the md raid array udev rules can work correctly without failure message. Signed-off-by: Coly Li <colyli@suse.de> Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-08-12mdadm.h: include sysmacros.h unconditionallyBaruch Siach1-2/+0
musl libc now also requires sys/sysmacros.h for the major/minor macros. All supported libc implementations carry sys/sysmacros.h, including diet-libc, klibc, and uclibc-ng. Cc: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: Baruch Siach <baruch@tkos.co.il> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-07-10mdadm: load default sysfs attributes after assemblationMariusz Dabrowski6-4/+202
Added new type of line to mdadm.conf which allows to specify values of sysfs attributes for MD devices that should be loaded after the array is assembled. Each line is interpreted as list of structures containing sysname of MD device (md126 etc.) and list of sysfs attributes and their values. Signed-off-by: Mariusz Dabrowski <mariusz.dabrowski@intel.com> Signed-off-by: Krzysztof Smolinski <krzysztof.smolinski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-07-09super-intel: Use put_unaligned in split_ullJes Sorensen1-3/+3
Shut up some gcc9 errors by using put_unaligned() accessors. Not pretty, but better than it was. Also correct to the correct swap macros. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-07-09mdadm.h: Introduced unaligned {get,put}_unaligned{16,32}()Jes Sorensen1-0/+30
We need these to avoid gcc9 going all crazy on us. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-07-09super-intel: Fix issue with abs() being irrelevantJes Sorensen1-2/+2
gcc9 complains about subtracting unsigned from unsigned and code assuming the result can be negative. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-07-02Enable probe_roms to scan more than 6 roms.Roman Sobanski1-42/+56
In some cases if more than 6 oroms exist, resource for particular controller may not be found. Change method for storing adapter_rom_resources from array to list. Signed-off-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-05-20mdmon: fix wrong array state when disk fails during mdmon startupArtur Paszkiewicz4-11/+17
If a member drive disappears and is set faulty by the kernel during mdmon startup, after ss->load_container() but before manage_new(), mdmon will try to readd the faulty drive to the array and start rebuilding. Metadata on the active drive is updated, but the faulty drive is not removed from the array and is left in a "blocked" state and any write request to the array will block. If the faulty drive reappears in the system e.g. after a reboot, the array will not assemble because metadata on the drives will be incompatible (at least on imsm). Fix this by adding a new option for sysfs_read(): "GET_DEVS_ALL". This is an extension for the "GET_DEVS" option and causes all member devices to be returned, even if the associated block device has been removed. Use this option in manage_new() to include the faulty device on the active_array's devices list. Mdmon will then properly remove the faulty device from the array and update the metadata to reflect the degraded state. Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-04-15udev: Add udev rules to create by-partuuid for md deviceLiwei Song1-0/+1
This rules will create link under /dev/disk/by-partuuid/ for MD devices partition, with which will support specify root=PARTUUID=XXX to boot rootfs. Signed-off-by: Liwei Song <liwei.song@windriver.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-04-10Create: Block rounding size to maxMariusz Tkaczyk2-6/+22
When passed size is smaller than chunk, mdadm rounds it to 0 but 0 there means max available space. Block it for every metadata. Remove the same check from imsm routine. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-04-10imsm: fix spare activation for old matrix arraysPawel Baldysiak1-9/+10
During spare activation get_extents() calculates metadata reserved space based on smallest active RAID member or it will take the defaults. Since patch 611d9529("imsm: change reserved space to 4MB") default is extended. If array was created prior that patch, reserved space is smaller. In case of matrix RAID - spare is activated in each array one-by-one, so it is spare for first activation, but treated as "active" during second one. In case of adding spare drive to old matrix RAID with the size the same as already existing member drive the routine will take the defaults during second run and mdmon will refuse to rebuild second volume, claiming that the drive does not have enough free space. Add parameter to get_extents(), so the during spare activation reserved space is always based on smallest active drive - even if given drive is already active in some other array of matrix RAID. Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-28add missing units to --examineCorey Hickey1-3/+3
Within the output of "mdadm --examine", there are three sizes reported on adjacent lines. For example: $ sudo mdadm --examine /dev/md3 [...] Avail Dev Size : 17580545024 (8383.06 GiB 9001.24 GB) Array Size : 17580417024 (16765.99 GiB 18002.35 GB) Used Dev Size : 11720278016 (5588.66 GiB 6000.78 GB) [...] This can be confusing, since the first and third line are in 512-byte sectors, and the second is in KiB. Add units to avoid ambiguity. (I don't particularly like the "KiB" notation, but it is at least unambiguous.) Signed-off-by: Corey Hickey <bugfood-c@fatooh.org> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-28Assemble: Fix starting array with initial reshape checkpointPawel Baldysiak1-2/+16
If array was stopped during reshape initialization, there might be a "0" checkpoint recorded in metadata. If array with such condition (reshape with position 0) is passed to kernel - it will refuse to start such array. Treat such array as normal during assemble, Grow_continue() will reinitialize and start the reshape. Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-28mdmon: wait for previous mdmon to exit during takeoverPawel Baldysiak1-3/+11
Since the patch c76242c5("mdmon: get safe mode delay file descriptor early"), safe_mode_dalay is set properly by initrd mdmon. But in some cases with filesystem traffic since the very start of the system, it might take a while to transit to clean state. Due to fact that new mdmon does not wait for the old one to exit - it might happen that the new one switches safe_mode_delay back to seconds, before old one exits. As the result two mdmons are running concurrently on same array. Wait for the old mdmon to exit by pinging it with SIGUSR1 signal, just in case it is sleeping. Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-28mdmon: don't attempt to manage new arrays when terminatingArtur Paszkiewicz1-4/+2
When mdmon gets a SIGTERM, it stops managing arrays that are clean. If there is more that one array in the container and one of them is dirty and the clean one is still present in mdstat, mdmon will treat it as a new array and start managing it again. This leads to a cycle of remove_old() / manage_new() calls for the clean array, until the other one also becomes clean. Prevent this by not calling manage_new() if sigterm is set. Also, remove a check for sigterm in manage_new() because the condition will never be true. Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-14mdadm/tests: add one test case for failfast of raid1Gioh Kim1-0/+74
This creates raid1 device with the failfast option and check all slaves have the failfast flag. And it does assembling and growing the raid1 device and check the failfast works fine. Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-13Fix reshape for decreasing data offsetCorey Hickey1-2/+2
...when not changing the number of disks. This patch needs context to explain. These are the relevant parts of the original code (condensed and annotated): if (dir > 0) { /* Increase data offset (reshape backwards) */ if (data_offset < sd->data_offset + min) { pr_err("--data-offset too small on %s\n", dn); goto release; } } else { /* Decrease data offset (reshape forwards) */ if (data_offset < sd->data_offset - min) { pr_err("--data-offset too small on %s\n", dn); goto release; } } When this code is reached, mdadm has already decided on a reshape direction. When increasing the data offset, the reshape runs backwards (dir==1); when decreasing the data offset, the reshape runs forwards (dir==-1). The conditional within the backwards reshape is correct: the requested offset must be larger than the old offset plus a minimum delta; thus the reshape has room to work. For the forwards reshape, the requested offset needs to be smaller than the old offset minus a minimum delta; to do this correctly, the comparison must be reversed. Also update the error message. Note: I have tested this change on a RAID 5 on Linux 4.18.0 and verified that there were no errors from the kernel and that the device data remained intact. I do not know if there are considerations for different RAID levels. Signed-off-by: Corey Hickey <bugfood-c@fatooh.org> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-13Detail.c: do not skip first character when calling xstrdup in Detail()Coly Li1-1/+1
'Commit b9c9bd9bacaa ("Detail: ensure --export names are acceptable as shell variables")' duplicates mdi->sys_name to sysdev string by, char *sysdev = xstrdup(mdi->sys_name + 1); which skips the first character of mdi->sys_name. Then when running mdadm --detail <md device> --export, the output looks like, MD_DEVICE_ev_sda2_ROLE=1 MD_DEVICE_ev_sda2_DEV=/dev/sda2 The first character of md device (between MD_DEVICE and _ROLE/_DEV) is dropped. The expected output should be, MD_DEVICE_dev_sda2_ROLE=1 MD_DEVICE_dev_sda2_DEV=/dev/sda2 This patch removes the '+ 1' from calling xstrdup() in Detail(), which gets the dropped first character back. Reported-by: Arvin Schnell <aschnell@suse.com> Fixes: b9c9bd9bacaa ("Detail: ensure --export names are acceptable as 4 shell variables") Signed-off-by: Coly Li <colyli@suse.de> Cc: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-11Fix spelling typos.Dimitri John Ledkov5-7/+7
Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-11imsm: fix reshape for >2TB drivesPawel Baldysiak1-42/+107
If reshape is performed on drives larger then 2 TB, migration checkpoint area that is calculated exeeds 32-bit value. This checkpoint area is a reserved space threated as backup during reshape - at the end of the drive, right before metadata. As a result - wrong space is used and the data that may exists there is overwritten. Adding additional field to migration record to track high order 32-bits of pba of this area. Three other fields that may exceed 32-bit value for large drives are added as well. Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2019-02-11imsm: finish recovery when drive with rebuild failsMariusz Tkaczyk1-15/+11
Commit d7a1fda2769b ("imsm: update metadata correctly while raid10 double degradation") resolves main Imsm double degradation problems but it omits one case. Now metadata hangs in the rebuilding state if the drive under rebuild is removed during recovery from double degradation. The root cause of this problem is comparing new map_state with current and if they both are degraded assuming that nothing new happens. Don't rely on map states, just check if device is failed. If the drive under rebuild fails then finish migration, in other cases update map state only (second fail means that destination map state can't be normal). To avoid problems with reassembling move end_migration (called after double degradation successful recovery) after check if recovery really finished, for details see (7ce057018 "imsm: fix: rebuild does not continue after reboot"). Remove redundant code responsible for finishing rebuild process. Function end_migration do exactly the same. Set last_checkpoint to 0, to prepare it for the next rebuild. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-11policy.c: Fix for compiler errorMariusz Tkaczyk1-1/+1
After cd72f9d(policy: support devices with multiple paths.) compilation on old compilers fails because "‘p’ may be used uninitialized in this function". Initialize it with NULL to prevent this. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-11policy.c: prevent NULL pointer referencingGioh Kim1-1/+1
paths could be NULL and paths[0] should be followed by NULL pointer checking. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06Grow: report correct new chunk size.NeilBrown1-1/+1
When using "--grow --chunk=" to change chunk size, the old chunksize is reported instead of the new. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06Grow: avoid overflow in compute_backup_blocks()NeilBrown1-1/+2
With a chunk size of 16Meg and data drive count of 8, this calculate can easily overflow the 'int' type that is used for the multiplications. So force it to use "long" instead. Reported-and-tested-by: Ed Spiridonov <edo.rus@gmail.com> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06Assemble: mask FAILFAST and WRITEMOSTLY flags when finding the most recent ↵Gioh Kim1-1/+4
device If devices[].i.disk.state has MD_DISK_FAILFAST or MD_DISK_WRITEMOSTLY flag, it cannot be the most recent device. Both flags should be masked before checking the state. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06imsm: update metadata correctly while raid10 double degradationMariusz Tkaczyk1-6/+19
Mdmon calls end_migration() when map state changes from normal to degraded. It is not valid because in raid 10 double degradation case mdmon breaks checkpointing but array is still rebuilding. In this case mdmon has to mark map as degraded and continues marking recovery checkpoint in metadata. Migration can be finished only if newly failed device is a rebuilding device. Add catching double degraded to degraded transition. Migration is finished but map state doesn't change, array is still degraded. Update failed_disk_num correctly. If double degradation happens rebuild will start on the lowest slot, but this variable points to the first failed slot. If second fail happens while rebuild this variable shouldn't be updated until rebuild is not finished. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06Monitor: add system timer to run --oneshot periodicallyNeilBrown3-0/+31
"mdadm --monitor --oneshot" can be used to get a warning if there are any degraded arrays. It can be helpful to get this warning periodically while the condition persists. This patch add a systemd service and timer which can be enabled with systemctl enable mdmonitor-oneshot.service and will then provide daily warnings. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06mdcheck: add systemd unit files to run mdcheck.NeilBrown5-1/+67
Having the mdcheck script is not use if is never run. This patch adds systemd unit files so that it can easily be run on the first Sunday of each month for 6 hours, then on every subsequent morning until the check is finished. The units still need to be enabled with systemctl enable mdcheck_start.timer The timer will only actually be started when an array which might need it becomes active. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06policy: support devices with multiple paths.NeilBrown3-75/+95
As new releases of Linux some time change the name of a path, some distros keep "legacy" names as well. This is useful, but confuses mdadm which assumes each device has precisely one path. So change this assumption: allow a disk to have several paths, and allow any to match when looking for a policy which matches a disk. Reported-and-tested-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06Document PART-POLICY linesNeilBrown2-2/+24
PART-POLICY has been accepted in mdadm.conf since the same time that POLICY was accepted, but it was never documented. So add the missing documentation. Also fix a bug which would have stopped it from working if anyone had ever tried to use it. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-12-06Assemble: keep MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY flagGioh Kim1-0/+3
Before updating superblock of slave disks, desired_state value is set for the target state of the slave disks. But it forgets to check MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY flags. Then start_arrays() calls ADD_NEW_DISK ioctl-call and pass the state without MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY. Currenlty it does not generate any problem because kernel does not care MD_DISK_FAILFAST or MD_DISK_WRITEMOSTLY flags. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Gioh Kim <gi-oh.kim@profitbricks.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-10-01Release mdadm-4.1mdadm-4.1Jes Sorensen5-22/+7
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-09-28imsm: block using partitionMariusz Tkaczyk1-0/+5
When IMSM_NO_PLATFORM is exported mdadm allows to create array with partitions or add partition to existing array but there is no possibilty to assemble it after stopping, see commit 691c6ee1b6bb ("IMSM/DDF: don't recognised these metadata on partitions."). When searching for hba capabilities first test device and print corresponding error if it is a partition. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-09-27Assemble: set devices to NULL when load_devices can't load deviceGuoqing Jiang1-0/+5
Since load_devices frees "devices" when it can't find any device, we should set it to NULL to avoid double free issue which can be reproduced by below steps: mdadm -CR /dev/md/vol -l0 -e 1.2 -n2 /dev/sd[b-c] --assume-clean mdadm -Ss mdadm -A /dev/md127 /dev/sd[b-c] --update metadata Reported-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Tested-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-09-27Assemble: free resources in load_devicesGuoqing Jiang1-0/+3
Like other failure cases in load_devices, we need to free those resources as well. Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-09-27imsm: Avoid duplicate entries in --detail-platformRoman Sobanski1-0/+3
In some scenarios mdadm --detail-platform shows duplicated info about one of controllers. Block it. Signed-off-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-09-27imsm: Block volume creation with empty nameRoman Sobanski1-1/+13
There is a possibility to create a RAID with empty name. Block it. Also remove trailing and leading whitespaces from given name. Signed-off-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-09-27mdadm.c: Fix error handling for --zero-superblockMariusz Tkaczyk2-3/+4
When Kill() cannot open device or find superblock it return the same error and mdadm ignores it. Change error handling in Kill() function. Return error if device is busy, ignore it only when superblock doesn't exist- assume that metadata is zeroed. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-08-03Release mdadm-4.1-rc2Jes Sorensen6-5/+22
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-08-03Incremental: remove external arrays and devices correctlyMariusz Tkaczyk1-26/+52
Kernel returns EBUSY when device fail invokes array fail. In external metadata if kernel returns it, mdadm doesn't stop member arrays but it will try to stop container directly. It fails because container still has working arrays, so udev remove is triggered. Try to set faulty state on device in member arrays first. If kernel returns EBUSY, stop this array. After that remove the device from container. In external metadata mdmon has to remove faulty devices from degraded arrays, just remove device from container. Raid5 array doesn't return EBUSY, it allows to remove every device. Mdadm shouldn't block it. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-08-01Grow: Frozen array can't be idleMariusz Tkaczyk1-1/+2
When array is frozen but there is no recovery/reshape in mdstat, check_idle() will not return error but grow countinue can still working. Check is array frozen. Do not use sysfs sync_action parameter because it doesn't exist for Raid0, simply check metadata_version in mdstat. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-31udev.rules: make safe timeouts compatible with split-usr systems.Dimitri John Ledkov1-2/+2
Instead of /usr/bin/sh, and /usr/bin/echo, use /bin/sh and shell built-in echo respectively. This makes udev-md-raid-safe-timeouts.rules to be compatible with both usr-merged and split-usr systems alike. Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-20Assemble: remove the protection when clustered raid do assembleGuoqing Jiang1-21/+0
For HA product, RA (resource agent) assembles cluster raid through call below cmd: $MDADM --assemble $mddev --config=$RAIDCONF $MDADM_HOMEHOST Sometimes node can't assemble array because all the nodes need to contend dlm lock, which causes node fence in automatic test. And in fact, we don't need the protection since the assemble cmd called by RA doesn't change superblock, so revert the commit 76781701a487090172d32befae07671a10ea88ad ("Assemble: provide protection when clustered raid do assemble") to remove unneccessary protection. Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-19mapfile: set *mapp to NULL after map_freeGuoqing Jiang1-0/+1
We can see "double free or corruption" with below steps as reported by Mariusz: export IMSM_NO_PLATFORM=1 export IMSM_DEVNAME_AS_SERIAL=1 mdadm --zero-super /dev/sd* mdadm -C /dev/md/imsm -n2 -eimsm /dev/sdb /dev/sdc --run mdadm -C /dev/md/r1 -n2 -z15G -eimsm /dev/sdb /dev/sdc -l1 --run --assume-clean mdadm -f /dev/md126 /dev/sdb mdadm -Ss It is caused by Manage_stop calls map_remove and map_unlock, but *mapp is not set to NULL after map_remove -> map_free, so map_unlock will call map_free again. Reported-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Tested-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11tests, imsm: Calculate expected array_size in proper wayMichal Zylowski3-8/+26
Tests should calucalte expected array_size accordingly to raid level. Also tests should take care about runding to neares MB introduced from b53bfba6 "imsm: use rounded size for metadata initialization". Expect proper size in tests. Simplify 09imsm-overlap test by creating array with size which has not been rounded. Main purpose of this test is checking something else. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11tests, imsm: Migration from RAID5 to RAID0 is not supported for IMSM metadataMichal Zylowski2-4/+4
When test tries to change RAID level from RAID5 to RAID0 mdadm respond with error about unsporrted operation. Make 16imsm-r5_3d-migrate-r0_3d and 16imsm-r5_5d-migrate-r0_5d test negative. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11tests, imsm: Test shouldn't call grow with chunk and level in one commandMichal Zylowski1-3/+8
Since a3b831c9 "Grow.c: Block any level migration with chunk size change" there is no possibility to perform migration between level and chunk in one operation. When any test tries to do this error message is printed and tests finishes with fail. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11tests, imsm: Set new_num_disks value corectly to perform expected size ↵Michal Zylowski3-1/+3
calculations In some migration tests, variable new_num_disks should be set to expected number of disks after migration. This is required for proper expected size calculation. Pass new_num_disks variable during test execution for: - 16imsm-r0_3d-migrate-r5_4d - 18imsm-r1_2d-takeover-r0_1d - 16imsm-r0_5d-migrate-r5_6d Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11tests, imsm: Fix unit inconsistency in tests error messagesMichal Zylowski1-1/+1
Chunk size copied from sysfs should be divied by 1024 to compare with expected chunk size. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11tests, imsm: Set correct expected offset between volumesMichal Zylowski13-19/+17
Since 611d9529 (imsm: change reserved space to 4MB) gap between RAID volumes has changed. Tests should expect correct offset in size calulations. Fix expected offset for tests. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11Coverity: Resource leak: close fd before returnAnthony Youngman1-0/+1
Anthony Youngman <anthony@youngman.org.uk> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11Coverity: Resource leak: close fds and free array before returnAnthony Youngman1-0/+3
Signed-off-by: Anthony Youngman <anthony@youngman.org.uk> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-07-11Coverity: Resource leak: fix return without freeAnthony Youngman1-0/+2
Signed-off-by: Anthony Youngman <anthony@youngman.org.uk> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-11Free map to avoid resource leak issuesGuoqing Jiang6-2/+13
1. There are some places which didn't free map as discovered by coverity. CID 289661 (#1 of 1): Resource leak (RESOURCE_LEAK)12. leaked_storage: Variable mapl going out of scope leaks the storage it points to. CID 289619 (#3 of 3): Resource leak (RESOURCE_LEAK)63. leaked_storage: Variable map going out of scope leaks the storage it points to. CID 289618 (#1 of 1): Resource leak (RESOURCE_LEAK)26. leaked_storage: Variable map going out of scope leaks the storage it points to. CID 289607 (#1 of 1): Resource leak (RESOURCE_LEAK)41. leaked_storage: Variable map going out of scope leaks the storage it points to. 2. If we call map_by_* inside a loop, then map_free should be called in the same loop, and it is better to set map to NULL after free. 3. And map_unlock is always called with map_lock, if we don't call map_remove before map_unlock, then the memory (allocated by map_lock -> map_read -> map_add -> xmalloc) could be leaked. So we need to free it in map_unlock as well. Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-08imsm: correct num_data_stripes in metadata map for migrationRoman Sobanski1-6/+10
When migrating an array from R0 to R10 num_data_stripes in metadata map will not be updated. Update it to allow correct migration process. Changes in R10 to R0 migration for clarity of code. Signed-off-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-08Assemble.c Don't ignore faulty disk when array is auto assembled.Mariusz Tkaczyk1-0/+2
Since commit 20dc76d15b40 ("imsm: Set disk slot number") mdadm sets slot number for each disk in imsm array. Now auto-assemble determines devices using slot number and ignores devices on the same slot that have older generation number. It causes infinit loop if failed device is still visible in system (it has metadata, but it is not merged with exisiting array). To avoid it, out-of-sync device should be added to the best[]. Later mdadm adds it as spare to the container. Imsm doesn't support disk replacement feature, so it can use rooms for replacements. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-04gcc-8 coverity hackJes Sorensen2-4/+21
Coverity still has issues with gcc-7, not to mention gcc-8. Hack around it, until they fix it. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-01mdadm/test: correct tests/testdev as testdev in 02r5growZhilong Liu1-1/+1
Fixes: a6994ccc230b ("mdadm/test: get rid of the tests/testdev") Signed-off-by: Zhilong Liu <zlliu@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-01mdadm/test: mdadm needn't make install on the systemZhilong Liu1-7/+4
Fixes: beb71de04d31 ("mdadm/test: enable clustermd testing under clustermd_tests/") clustermd_tests/func.sh: remove unnecessary 'make install', just ensure 'make everything' has done. the original idea is to make the /sbin/mdadm version same as ./mdadm, and this breakage has pointed out by commit: 59416da78fc6 ("tests/func.sh: Fix some total breakage in the test scripts") Signed-off-by: Zhilong Liu <zlliu@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-06-01Check major number of block device when querying md deviceXiao Ni1-3/+2
It give error message when query a non md device. mdadm /dev/null /dev/null: is an md device, but gives "Inappropriate ioctl for device" when queried It's introduced by commit 5cb8599 and 8d0cd09 At first it checks whether a block is md device by function md_get_version. In this function it does mainly two jobs: 1. send request by ioctl. (now it can be replace by argument ioctlerr) 2. check the block device major number which we don't do this. We add the second judgement in this patch. Fixes: 5cb8599 and 8d0cd09 Reported-by: Karsten Weiss <karsten.weiss@atos.net> Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31super-ddf: Fix gcc-8.1 overflow warningsJes Sorensen1-2/+3
Cast to types that are big enough to hold the values, but also guarantee no overflow of the buffer keepts gcc happy. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31super1: Fix cases triggering gcc-8.1 strncpy truncate warningJes Sorensen1-4/+18
Find the string length, copy it, and zero out the rest, instead of relying on strncpy cleaning up for us. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31super0: Use memmove() when adjusting sparc2.2 superblock dataJes Sorensen1-3/+4
memcpy() does not allow overlapping copies, switch to memmove() Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31mdopen: fix gcc 8.1 string overflow errorJes Sorensen1-3/+5
We already cut symlinks longer than 1000, so rely on this calling readlink and error out if we are able to read more than 1000 bytes. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31Monitor: Increase size of percentalert to avoid gcc warningJes Sorensen1-1/+1
gcc-8.1 complains about truncated string operations. While we know percent will never grow larger than 100, it doesn't cost us anything to increase the size of 'percentalert' on the stack like this. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31imsm: Do not require MDADM_EXPERIMENTAL flag anymoreMichal Zylowski5-33/+6
Grow feature for IMSM metadata is currently fully supported and tested. Reshape operation is not in experimental state anymore, so usage of this flag is unnecessary. Do not require MDADM_EXPERIMENTAL flag and remove obsolete information from manual. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Acked-by: Mariusz Dabrowski <mariusz.dabrowski@intel.com> Acked-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-31imsm: Do not block volume creation when container has disks with mixed ↵Michal Zylowski1-0/+5
sector size Currently when created container keeps disks with mixed sector size (few 4K disks and some 512 disks) there is no possibility to create volume from disks with one sector size. Allow volume creation when given disks are related with mixed container. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-30super-intel: Do not truncate last character of volume nameJes Sorensen1-3/+4
Clear up strncpy abuse to avoid gcc-8.1 complaining about truncating the string. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-30super-intel: Avoid gcc-8.1 complaining about truncating snprintf()Jes Sorensen1-1/+2
We know the max size of the volume name, so no need to play the snprintf() game. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-29super-intel: Get rid of unnused stringJes Sorensen1-1/+0
No need to snprintf() into the string when we don't use it afterards Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-29super-intel: Use memcpy() to avoid confusing gccJes Sorensen1-1/+1
When added :0 to serial number and copying it back, use memcpy() instead of strncpy() as we know the actual length. This stops gcc from complaining with -Werror=stringop-truncation enabled Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-29Do not confuse gccJes Sorensen1-1/+7
gcc-8.1's -Werror=stringop-truncation is easily confused. Rather than disabling the check, make it explicit we are OK truncating here. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-05-29Fix misspelling of 'alignment' and 'geometry'Michal Zylowski1-15/+15
Set gemetry to geometry in error message about geometry validation failed. Fix misspelled 'alignment' word in imsm_component_size_alignment_check function. Signed-off-by: Michal Zylowski <michal.zylowski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-04-27mdadm/grow: correct size and chunk_size castingRoman Sobanski1-1/+1
With commit 4b74a905a67e ("mdadm/grow: Component size must be larger than chunk size") mdadm returns incorrect message if size given to grow was greater than 2 147 483 647 K. Cast chunk_size to "unsigned long long" instead of casting size to "int". Signed-off-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2018-04-25Prevent create IMSM volume with size smaller than 1M or chunkRoman Sobanski1-0/+10
Block creation of the imsm volume when given size is smaller than 1M and print appropriate message. Commit b53bfba6119d3f6f56eb9e10e5a59da6901af159 (imsm: use rounded size for metadata initialization) introduces issue with rounding volume sizes smaller than 1M to 0. There is an inconsistency when size smaller than 1M was given depends of what we give as target device: 1) When block devices was given created volume has maximum available size. 2) When container symlink was given created volume has size 0. Additionally it causes below call trace: [69587.891556] WARNING: CPU: 28 PID: 22485 at ../drivers/md/md.c:7582 md_seq_show+0x764/0x770 [md_mod] [69588.066405] Call Trace: [69588.066409] seq_read+0x336/0x430 [69588.066411] proc_reg_read+0x40/0x70 [69588.066412] __vfs_read+0x26/0x140 [69588.066414] vfs_read+0x89/0x130 [69588.066415] SyS_read+0x42/0x90 [69588.066417] do_syscall_64+0x74/0x140 [69588.066419] entry_SYSCALL_64_after_hwframe+0x3d/0xa2 Signed-off-by: Roman Sobanski <roman.sobanski@intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>