mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	zed: Ignore false 'atari' partitions in autoreplace
libudev will sometimes falsely identify an 'atari' partition on a blank disk, preventing it from being used in an autoreplace. This seems to be a known issue. The workaround is to just ignore the fake partition and continue with the autoreplace. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #13497 Closes #13632
This commit is contained in:
		
							parent
							
								
									f48d9b4269
								
							
						
					
					
						commit
						acd7464639
					
				| @ -208,6 +208,12 @@ zed_udev_monitor(void *arg) | |||||||
| 		 * if this is a disk and it is partitioned, then the | 		 * if this is a disk and it is partitioned, then the | ||||||
| 		 * zfs label will reside in a DEVTYPE=partition and | 		 * zfs label will reside in a DEVTYPE=partition and | ||||||
| 		 * we can skip passing this event | 		 * we can skip passing this event | ||||||
|  | 		 * | ||||||
|  | 		 * Special case: Blank disks are sometimes reported with | ||||||
|  | 		 * an erroneous 'atari' partition, and should not be | ||||||
|  | 		 * excluded from being used as an autoreplace disk: | ||||||
|  | 		 * | ||||||
|  | 		 * https://github.com/openzfs/zfs/issues/13497
 | ||||||
| 		 */ | 		 */ | ||||||
| 		type = udev_device_get_property_value(dev, "DEVTYPE"); | 		type = udev_device_get_property_value(dev, "DEVTYPE"); | ||||||
| 		part = udev_device_get_property_value(dev, | 		part = udev_device_get_property_value(dev, | ||||||
| @ -215,15 +221,24 @@ zed_udev_monitor(void *arg) | |||||||
| 		if (type != NULL && type[0] != '\0' && | 		if (type != NULL && type[0] != '\0' && | ||||||
| 		    strcmp(type, "disk") == 0 && | 		    strcmp(type, "disk") == 0 && | ||||||
| 		    part != NULL && part[0] != '\0') { | 		    part != NULL && part[0] != '\0') { | ||||||
|  | 			const char *devname = | ||||||
|  | 			    udev_device_get_property_value(dev, "DEVNAME"); | ||||||
|  | 
 | ||||||
|  | 			if (strcmp(part, "atari") == 0) { | ||||||
| 				zed_log_msg(LOG_INFO, | 				zed_log_msg(LOG_INFO, | ||||||
| 			    "%s: skip %s since it has a %s partition already", | 				    "%s: %s is reporting an atari partition, " | ||||||
| 			    __func__, | 				    "but we're going to assume it's a false " | ||||||
| 			    udev_device_get_property_value(dev, "DEVNAME"), | 				    "positive and still use it (issue #13497)", | ||||||
| 			    part); | 				    __func__, devname); | ||||||
|  | 			} else { | ||||||
|  | 				zed_log_msg(LOG_INFO, | ||||||
|  | 				    "%s: skip %s since it has a %s partition " | ||||||
|  | 				    "already", __func__, devname, part); | ||||||
| 				/* skip and wait for partition event */ | 				/* skip and wait for partition event */ | ||||||
| 				udev_device_unref(dev); | 				udev_device_unref(dev); | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		/*
 | 		/*
 | ||||||
| 		 * ignore small partitions | 		 * ignore small partitions | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tony Hutter
						Tony Hutter