You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.7 KiB

  1. --- a/src/setup/setup.c
  2. +++ b/src/setup/setup.c
  3. @@ -83,6 +83,9 @@ static int verify_esp(const char *p, uin
  4. blkid_probe b = NULL;
  5. int r;
  6. const char *v;
  7. + char buf[1024];
  8. +
  9. + memset(buf, 0, sizeof(buf));
  10. if (statfs(p, &sfs) < 0) {
  11. fprintf(stderr, "Failed to check file system type of %s: %m\n", p);
  12. @@ -122,24 +125,38 @@ static int verify_esp(const char *p, uin
  13. return -ENODEV;
  14. }
  15. - r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
  16. + r = asprintf(&t, "/sys/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
  17. if (r < 0) {
  18. fprintf(stderr, "Out of memory.\n");
  19. return -ENOMEM;
  20. }
  21. + r = readlink(t, buf, sizeof(buf) - 1);
  22. + if (r < 0) {
  23. + fprintf(stderr, "Failed to identify device node for block device %u:%u\n", major(st.st_dev), minor(st.st_dev));
  24. + return -ENOMEM;
  25. + }
  26. +
  27. + r = asprintf(&t, "/dev/%s", basename(buf));
  28. + if (r < 0) {
  29. + fprintf(stderr, "Out of memory.\n");
  30. + return -ENOMEM;
  31. + }
  32. +
  33. errno = 0;
  34. b = blkid_new_probe_from_filename(t);
  35. - free(t);
  36. if (!b) {
  37. if (errno != 0) {
  38. - fprintf(stderr, "Failed to open file system %s: %m\n", p);
  39. + fprintf(stderr, "Failed to open file system %s on %s: %m\n", p, t);
  40. + free(t);
  41. return -errno;
  42. }
  43. + free(t);
  44. fprintf(stderr, "Out of memory.\n");
  45. return -ENOMEM;
  46. }
  47. + free(t);
  48. blkid_probe_enable_superblocks(b, 1);
  49. blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);