Multiple issues with parted

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

While testing Intel BIOS RAID using mdraid I noticed that the kernels
view of the partition table never changes even though we successfully
make Parted.Disk.commitToOs() calls.

This has let to me diving into libparted's commit_to_os() code for Linux
and there are multiple issues hiding in there:

1) Parted reads /sys/block/foo/range to determine how many partitions
   the device type supports and then makes BLKPG ioctl's to update the
   kernels view of the partition table for partitions which fall into
   this range. However for example /sys/block/sda/range contains 16,
   there are 2 issue with libparted using this number:
   1) scsi major's only support 15 partitions, 1 of the range of 16
      is reserved for the whole device, yet libparted will try
      to notify the kernel about 16 partitions if present
   2) If the major's partition minor's run out, the kernel will switch
      to the mdp major for the other partitions, iow range no longer limits
      the number of partitions.

2) libparted assumes the user knows what he is doing, and will ignore
   -ebusy errors for partitions, assuming that the user is smart enough
   to only change unused partitions (BAD, really really BAD)

3) because of 1) libparted will only sync 1 partition on /dev/md# devices
   (would be 0 if not for the of by 1 bug as all md#p# partitions use the
    mdp major), and it fails to even do that without reporting an error.

###

Now we can fix 1) by simply not checking /sys/block/foo/range, but instead
just syncing as many partitions as are in the table. 2) is more troublesome,
we could just make -EBUSY an error, but that may annoy / bug some users.

An even bigger problem IMHO is the use of the BLKPG ioctl instead of BLKRRPART
at all. What this does is tell the kernel parted's view of the partition table
and make it use that, instead of telling the kernel to reread the partition table.
According to the parted sources this is done for the case where the kernel does
not know the disklabel type. However during initial scanning, when we don't modify
a disk, and during boot and normal running of the system, we rely on the kernel's
view. So IMHO it would be much better to always use the kernels view and just
always call BLKRRPART in commit_to_os(), this would solve all of the above issues.

Regards,

Hans

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux