$ apt-show-versions multipath-tools multipath-tools:amd64/vivid 0.4.9-3ubuntu12 uptodate
Reproduce: Mount an image from a path longer than 63 chars succeeds: $ sudo kpartx -av asfd1asdf2asdf3asdf4asdf5asdf6asfd7asdf8asdf9asf10asdf11asdf12asdf13/disk.img add map loop0p1 (252:0): 0 409600 linear /dev/loop0 2048 add map loop0p2 (252:1): 0 2 linear /dev/loop0 411648 add map loop0p5 : 0 819200 linear /dev/loop0 413696 add map loop0p6 : 0 819200 linear /dev/loop0 1234944 add map loop0p7 : 0 819200 linear /dev/loop0 2056192 add map loop0p8 : 0 1316864 linear /dev/loop0 2877440
but dismounting fails: $ sudo kpartx -dv asfd1asdf2asdf3asdf4asdf5asdf6asfd7asdf8asdf9asf10asdf11asdf12asdf13/disk.img
strace shows that the parameter on the dismount appears to get cut at 63 chars: ioctl(3, DM_LIST_VERSIONS, 0x15b89b0) = 0 stat("asfd1asdf2asdf3asdf4asdf5asdf6asfd7asdf8asdf9asf10asdf11asdf12asdf13/disk.img", {st_mode=S_IFREG|0644, st_size=2147483648, ...}) = 0 stat("/dev/loop0", {st_mode=S_IFBLK|0660, st_rdev=makedev(7, 0), ...}) = 0 open("/dev/loop0", O_RDONLY) = 4 ioctl(4, LOOP_GET_STATUS, {number=0, offset=0, flags=0, name="asfd1asdf2asdf3asdf4asdf5asdf6asfd7asdf8asdf9asf10asdf11asdf12a", ...}) = 0 close(4) = 0 stat("/dev/loop1", {st_mode=S_IFBLK|0660, st_rdev=makedev(7, 1), ...}) = 0 open("/dev/loop1", O_RDONLY) = 4 ioctl(4, LOOP_GET_STATUS, {number=0, offset=0, flags=0, name="asfd1asdf2asdf3asdf4asdf5asdf6asfd7asdf8asdf9asf10asdf11asdf12a", ...}) = -1 ENXIO (No such device or address)
if the path is 63 chars or less, the dismount also succeeds.
This is quickly becomes an issue if you want to use full disk paths in your shell scripts.
$ apt-show-versions multipath-tools tools:amd64/ vivid 0.4.9-3ubuntu12 uptodate
multipath-
Reproduce: asdf4asdf5asdf6 asfd7asdf8asdf9 asf10asdf11asdf 12asdf13/ disk.img
Mount an image from a path longer than 63 chars succeeds:
$ sudo kpartx -av asfd1asdf2asdf3
add map loop0p1 (252:0): 0 409600 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 2 linear /dev/loop0 411648
add map loop0p5 : 0 819200 linear /dev/loop0 413696
add map loop0p6 : 0 819200 linear /dev/loop0 1234944
add map loop0p7 : 0 819200 linear /dev/loop0 2056192
add map loop0p8 : 0 1316864 linear /dev/loop0 2877440
but dismounting fails: asdf4asdf5asdf6 asfd7asdf8asdf9 asf10asdf11asdf 12asdf13/ disk.img
$ sudo kpartx -dv asfd1asdf2asdf3
strace shows that the parameter on the dismount appears to get cut at 63 chars: 2asdf3asdf4asdf 5asdf6asfd7asdf 8asdf9asf10asdf 11asdf12asdf13/ disk.img" , {st_mode= S_IFREG| 0644, st_size=2147483648, ...}) = 0 S_IFBLK| 0660, st_rdev=makedev(7, 0), ...}) = 0 2asdf3asdf4asdf 5asdf6asfd7asdf 8asdf9asf10asdf 11asdf12a" , ...}) = 0 S_IFBLK| 0660, st_rdev=makedev(7, 1), ...}) = 0 2asdf3asdf4asdf 5asdf6asfd7asdf 8asdf9asf10asdf 11asdf12a" , ...}) = -1 ENXIO (No such device or address)
ioctl(3, DM_LIST_VERSIONS, 0x15b89b0) = 0
stat("asfd1asdf
stat("/dev/loop0", {st_mode=
open("/dev/loop0", O_RDONLY) = 4
ioctl(4, LOOP_GET_STATUS, {number=0, offset=0, flags=0, name="asfd1asdf
close(4) = 0
stat("/dev/loop1", {st_mode=
open("/dev/loop1", O_RDONLY) = 4
ioctl(4, LOOP_GET_STATUS, {number=0, offset=0, flags=0, name="asfd1asdf
if the path is 63 chars or less, the dismount also succeeds.
This is quickly becomes an issue if you want to use full disk paths in your shell scripts.