Messages in this thread |  | | Date | Thu, 22 Apr 1999 18:57:21 +0200 (MET DST) | | From | (Guest section DW) | | Subject | Re: /dev/loop0 offset doen't work on /dev/scd0 |
| |
From: Andi Kleen <ak@muc.de>
Harald Koenig <koenig@tat.physik.uni-tuebingen.de> writes:
> why isn't it possible to use > > # losetup -o 2048 /dev/loop0 /dev/scd0 > ioctl: LOOP_SET_STATUS: Invalid argument > > without `-o 2048' the loopback works fine (but is useless because I need to skip > the first sector;). strace shows: > > # strace losetup -o 2048 /dev/loop0 /dev/scd0 > ... > open("/dev/scd0", O_RDWR) = -1 EROFS (Read-only file system) > open("/dev/scd0", O_RDONLY) = 3 > open("/dev/loop0", O_RDONLY) = 4 > ioctl(4, LOOP_SET_FD, 0x3) = 0 > ioctl(4, LOOP_SET_STATUS, 0xbffff500) = -1 EINVAL (Invalid argument) > ioctl(4, LOOP_CLR_FD, 0) = 0 > write(2, "ioctl: LOOP_SET_STATUS: Invalid "..., 41ioctl: LOOP_SET_STATUS: Invalid argument) = 41
My guess is that you have a miscompiled losetup utility. Most losetups compiled with glibc 2.0 are broken, because glibc changed the size of dev_t without bothering to supply a linux/loop.h replacement (struct loop_info contains dev_t). Compiled with a 32bit dev_t you really need set lo_encrypt_type, and the kernel obviously doesn't know how to deal with lo_encrypt_type 2048.
Unfortunately there is no easy way to fix losetup without introducing glibc version dependencies, because glibc offers no public function to convert its dev_t (from its stat wrapper) into a kernel dev_t.
The current code in util-linux does
#include <linux/posix_types.h> #define dev_t __kernel_dev_t #include <linux/loop.h> #undef dev_t
which is not very elegant but as far as I know works on all systems.
Andries - aeb@cwi.nl
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
|  |