Re: aarch64 lib32 vs. armv7 mdconfig behavior: "mdconfig: ioctl(/dev/mdctl): Inappropriate ioctl for device"
Date: Tue, 01 Aug 2023 06:42:20 UTC
On Jul 31, 2023, at 23:22, Mark Millard <marklmi@yahoo.com> wrote:
> Not via a chroot'd context, but using the files from a
> directory tree that allows an armv7 chroot:
>
> # /usr/obj/DESTDIRs/main-CA7-chroot/sbin/mdconfig -s40m
> mdconfig: ioctl(/dev/mdctl): Inappropriate ioctl for device
>
> This sort of thing messes up the operation of the likes
> of the /usr/tests/sbin/growfs/legacy_test logic:
>
> #! /usr/local/bin/perl
> # $FreeBSD$
>
> use strict;
> use warnings;
> use POSIX;
> use Test::More tests => 19;
> use Fcntl qw(:DEFAULT :seek);
> . . .
> SKIP: {
> skip "Cannot test without UID 0", 19 if $<;
>
> chomp(my $md = `mdconfig -s40m`);
> like($md, qr/^md\d+$/, "Created $md with size 40m") or die;
> $unit = substr $md, 2;
> . . .
>
>
> Other ioctl complaints:
>
> sys/aio/aio_test:md_kq -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
> sys/aio/aio_test:md_poll -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
> sys/aio/aio_test:md_signal -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
> sys/aio/aio_test:md_suspend -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
> sys/aio/aio_test:md_thread -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
> sys/aio/aio_test:md_waitcomplete -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
> sys/aio/aio_test:vectored_md_poll -> failed: ioctl MDIOCATTACH failed: Inappropriate ioctl for device
>
>
> For reference:
>
> # uname -apKU
> FreeBSD CA78C-WDK23-ZFS 14.0-CURRENT FreeBSD 14.0-CURRENT aarch64 1400093 #5 main-n264334-215bab7924f6-dirty: Wed Jul 26 02:13:44 PDT 2023 root@CA78C-WDK23-ZFS:/usr/obj/BUILDs/main-CA78C-nodbg-clang/usr/main-src/arm64.aarch64/sys/GENERIC-NODBG-CA78C arm64 aarch64 1400093 1400093
Adding more examples of ioctl failure contexts . . .
sys/netpfil/pf/ioctl/validation:clrtstats -> failed: Request with size -1 failed
is actually at least associated with a ioctl use:
ATF_TC_BODY(clrtstats, tc)
{
struct pfioc_table io;
struct pfr_table tbl;
int flags;
COMMON_HEAD();
flags = 0;
common_init_tbl(&tbl);
bzero(&io, sizeof(io));
io.pfrio_flags = flags;
io.pfrio_buffer = &tbl;
io.pfrio_esize = sizeof(tbl);
/* Negative size. This will succeed, because the kernel will not copy
* tables than it has. */
io.pfrio_size = -1;
if (ioctl(dev, DIOCRCLRTSTATS, &io) != 0)
atf_tc_fail("Request with size -1 failed ");
DIOCGETSRCNODES, DIOCRGETTABLES, DIOCRGETTSTATS, and DIOCRSETTFLAGS
are similar and get the notice as well.
The earlier aio_test examples are from:
static int
aio_md_setup(void)
{
int error, fd, mdctl_fd, unit;
char pathname[PATH_MAX];
struct md_ioctl mdio;
char buf[80];
ATF_REQUIRE_KERNEL_MODULE("aio");
mdctl_fd = open("/dev/" MDCTL_NAME, O_RDWR, 0);
ATF_REQUIRE_MSG(mdctl_fd != -1,
"opening /dev/%s failed: %s", MDCTL_NAME, strerror(errno));
bzero(&mdio, sizeof(mdio));
mdio.md_version = MDIOVERSION;
mdio.md_type = MD_MALLOC;
mdio.md_options = MD_AUTOUNIT | MD_COMPRESS;
mdio.md_mediasize = GLOBAL_MAX;
mdio.md_sectorsize = 512;
strlcpy(buf, __func__, sizeof(buf));
mdio.md_label = buf;
if (ioctl(mdctl_fd, MDIOCATTACH, &mdio) < 0) {
error = errno;
errno = error;
atf_tc_fail("ioctl MDIOCATTACH failed: %s", strerror(errno));
}
. . .
===
Mark Millard
marklmi at yahoo.com