summaryrefslogtreecommitdiff
path: root/open_issues/blkrrpart_ioctl.mdwn
blob: 6a4c0378e2c098f22757b960250f4455322dde91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[[meta copyright="Copyright © 2009 Free Software Foundation, Inc."]]

[[meta license="""[[toggle id="license" text="GFDL 1.2+"]][[toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled
[[GNU_Free_Documentation_License|/fdl]]."]]"""]]

[[meta title="BLKRRPART IOCTL"]]

[[tag open_issue_glibc open_issue_hurd open_issue_gnumach]]

Just like in other Unix systems one can, for example, use `fdisk` or `parted`
to manage hard disks' partition tables.  After doing changes to a disk's
partition table, the kernel has to be instructed to reinitialize its internal
data structures: where does a partition begin, where does it end, etc.

With `fdisk` and friends this is done on Linux with the `BLKRRPART` IOCTL,
which is used to tell the kernel to reread the disk's partition table.

`parted` also uses this interface on Linux, but for GNU Hurd, the corresponding
function, `libparted/arch/gnu.c (gnu_disk_commit)`, doesn't do anything at all.
The infrastructure in [[GNU_Mach|microkernel/mach/gnumach]] is already there,
`linux/src/drivers/block/ide.c (ide_ioctl) <BLKRRPART>` and
`linux/src/drivers/scsi/sd_ioctl.c (sd_ioctl) <BLKRRPART>`, but the IOCTL needs
to be routed from `libparted` through [[glibc]]'s Hurd IOCTL interface, through
Hurd's [[hurd/libstore]], to [[GNU_Mach|microkernel/mach/gnumach]].

This is not a huge project, and actually one that is suitable for someone who
wants to start with hacking the system.