mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 02:49:32 +03:00
udev: correctly handle partition #16 and later
If a zvol has more than 15 partitions, the minor device number exhausts the slot count reserved for partitions next to the zvol itself. As a result, the minor number cannot be used to determine the partition number for the higher partition, and doing so results in wrong named symlinks being generated by udev. Since the partition number is encoded in the block device name anyway, let's just extract it from there instead. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes #15904 Closes #15970
This commit is contained in:
parent
fa2cbd4007
commit
3fb0942cc5
@ -51,7 +51,7 @@ const char *__asan_default_options(void) {
|
|||||||
int
|
int
|
||||||
main(int argc, const char *const *argv)
|
main(int argc, const char *const *argv)
|
||||||
{
|
{
|
||||||
if (argc != 2) {
|
if (argc != 2 || strncmp(argv[1], "/dev/zd", 7) != 0) {
|
||||||
fprintf(stderr, "usage: %s /dev/zdX\n", argv[0]);
|
fprintf(stderr, "usage: %s /dev/zdX\n", argv[0]);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
@ -72,9 +72,10 @@ main(int argc, const char *const *argv)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int dev_part = minor(sb.st_rdev) % ZVOL_MINORS;
|
const char *dev_part = strrchr(dev_name, 'p');
|
||||||
if (dev_part != 0)
|
if (dev_part != NULL) {
|
||||||
sprintf(zvol_name + strlen(zvol_name), "-part%u", dev_part);
|
sprintf(zvol_name + strlen(zvol_name), "-part%s", dev_part + 1);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < strlen(zvol_name); ++i)
|
for (size_t i = 0; i < strlen(zvol_name); ++i)
|
||||||
if (isblank(zvol_name[i]))
|
if (isblank(zvol_name[i]))
|
||||||
|
Loading…
Reference in New Issue
Block a user