kern/167979: [ufs] DIOCGDINFO ioctl does not work on 8.2 file systems
Fahad Ahmed
ahmedatnet at gmail.com
Mon Jan 13 15:00:01 UTC 2014
The following reply was made to PR kern/167979; it has been noted by GNATS.
From: Fahad Ahmed <ahmedatnet at gmail.com>
To: bug-followup at FreeBSD.org,
spencer_minear at mcafee.com
Cc:
Subject: Re: kern/167979: [ufs] DIOCGDINFO ioctl does not work on 8.2 file systems
Date: Mon, 13 Jan 2014 06:55:37 -0800
Bug 167979 states that ioctl(fd, DIOCGDINFO, &dl) fails with error: =
'Inappropriate ioctl for device'. The reason for failure of ioctl call =
with DIOCGDINFO option is that Makefile used to build kernel image does =
not have /usr/src/sys/geom/geom_bsd.c and =
/usr/src/sys/geom/geom_bsd_enc.c files included in it. When these two =
files are included in the Makefile and information is added for how to =
make object files of these files and how to link them with kernel image, =
DIOCGDINFO option works fine when used with ioctl.
To add these files in Makefile automatically, "/usr/src/sys/conf/files" =
has to be changed as follows:
# diff -u /usr/src/sys/conf/files_org /usr/src/sys/conf/files
--- /usr/src/sys/conf/files_org 2012-09-20 23:47:07.000000000 -0700
+++ /usr/src/sys/conf/files 2012-09-20 23:48:04.000000000 -0700
@@ -2011,8 +2011,8 @@
geom/eli/pkcs5v2.c optional geom_eli
geom/gate/g_gate.c optional geom_gate
geom/geom_aes.c optional geom_aes
-geom/geom_bsd.c optional geom_bsd
-geom/geom_bsd_enc.c optional geom_bsd
+geom/geom_bsd.c standard
+geom/geom_bsd_enc.c standard
geom/geom_ccd.c optional ccd | geom_ccd
geom/geom_ctl.c standard
geom/geom_dev.c standard
After these changes, automatically generated Makefile will have =
inclusion of "/usr/src/sys/geom/geom_bsd.c" and =
"/usr/src/sys/geom/geom_bsd_enc.c" files.
=20
Difference in Makefile generated by making above changes in =
"/usr/src/sys/conf/files":
# diff -u Makefile ../BUG_FIX/Makefile | grep geom
- pseudofs_fileno.o pseudofs_vncache.o pseudofs_vnops.o geom_ctl.o =
\
- geom_dev.o geom_disk.o geom_dump.o geom_event.o geom_io.o \
- geom_kern.o geom_slice.o geom_subr.o geom_vfs.o g_label.o \
+ pseudofs_fileno.o pseudofs_vncache.o pseudofs_vnops.o geom_bsd.o =
\
+ geom_bsd_enc.o geom_ctl.o geom_dev.o geom_disk.o geom_dump.o \
+ geom_event.o geom_io.o geom_kern.o geom_slice.o geom_subr.o \
+ geom_vfs.o g_label.o g_label_ext2fs.o g_label_iso9660.o \
- $S/fs/pseudofs/pseudofs_vnops.c $S/geom/geom_ctl.c \
- $S/geom/geom_dev.c $S/geom/geom_disk.c $S/geom/geom_dump.c \
- $S/geom/geom_event.c $S/geom/geom_io.c $S/geom/geom_kern.c \
- $S/geom/geom_slice.c $S/geom/geom_subr.c $S/geom/geom_vfs.c \
- $S/geom/label/g_label.c $S/geom/label/g_label_ext2fs.c \
- $S/geom/label/g_label_iso9660.c $S/geom/label/g_label_msdosfs.c =
\
- $S/geom/label/g_label_ntfs.c $S/geom/label/g_label_reiserfs.c \
- $S/geom/label/g_label_ufs.c $S/geom/label/g_label_gpt.c \
- $S/geom/part/g_part.c $S/geom/part/g_part_bsd.c \
- $S/geom/part/g_part_ebr.c $S/geom/part/g_part_gpt.c \
- $S/geom/part/g_part_mbr.c $S/isa/isa_common.c $S/isa/isahint.c \
+ $S/fs/pseudofs/pseudofs_vnops.c $S/geom/geom_bsd.c \
+ $S/geom/geom_bsd_enc.c $S/geom/geom_ctl.c $S/geom/geom_dev.c \
+ $S/geom/geom_disk.c $S/geom/geom_dump.c $S/geom/geom_event.c \
+ $S/geom/geom_io.c $S/geom/geom_kern.c $S/geom/geom_slice.c \
+ $S/geom/geom_subr.c $S/geom/geom_vfs.c $S/geom/label/g_label.c \
+ $S/geom/label/g_label_ext2fs.c $S/geom/label/g_label_iso9660.c \
+ $S/geom/label/g_label_msdosfs.c $S/geom/label/g_label_ntfs.c \
+ $S/geom/label/g_label_reiserfs.c $S/geom/label/g_label_ufs.c \
+ $S/geom/label/g_label_gpt.c $S/geom/part/g_part.c \
+ $S/geom/part/g_part_bsd.c $S/geom/part/g_part_ebr.c \
+ $S/geom/part/g_part_gpt.c $S/geom/part/g_part_mbr.c \
+geom_bsd.ln: $S/geom/geom_bsd.c
+geom_bsd.o: $S/geom/geom_bsd.c
+geom_bsd_enc.ln: $S/geom/geom_bsd_enc.c
+geom_bsd_enc.o: $S/geom/geom_bsd_enc.c
geom_ctl.ln: $S/geom/geom_ctl.c
=20
Fix was tested on FreeBSD 8.3, with the test program provided with the =
bug. Following are the results:
Before Fix:
# ./bug ad0s1a
bug: DIOCGDIFNO failed on 'ad0s1a': Inappropriate ioctl for device
# ./bug ad0s1b
bug: DIOCGDIFNO failed on 'ad0s1b': Inappropriate ioctl for device
After Fix:
# ./bug ad0s1a
Filesystem type 4.2BSD
# ./bug ad0s1b
Filesystem type swap
Fahad Ahmed, Engineer
Dorr H. Clark, advisor
COEN 284, Operating Systems Case Study
Santa Clara University
More information about the freebsd-fs
mailing list