Re: 2.4.17pre2: devfs: devfs_mk_dir(printers): could not append to dir: dffe45c0 "", err: -17

Richard Gooch (rgooch@ras.ucalgary.ca)
Sun, 2 Dec 2001 11:47:48 -0700


andrew may writes:
> On Sat, Dec 01, 2001 at 08:37:24PM -0500, Adam Schrotenboer wrote:
> > On Saturday 01 December 2001 13:08, Richard Gooch wrote:
> > > linux-kernel@borntraeger.net writes:
> > <snip>
> > > The new devfs core is less forgiving about these kinds of
> > > bugs/misuses.
> > >
> > > > devfs: devfs_register(nvidiactl): could not append to parent, err: -17
> > > > devfs: devfs_register(nvidia0): could not append to parent, err: -17
> > > >
> > > > with 2.4.16 and before the message was:
> > > >
> > > > devfs: devfs_register(): device already registered: "nvidia0"
> > >
> > > Who knows what nvidia does? Talk to them. Could be a bug in their
> > > driver where they create duplicate entries (the old devfs code would
> > > often let you get away with this). Or again, perhaps something in
> > > user-space is creating these entries.
> > >
> > As of 1541 anyway (haven't tried anything newer, assuming newer exists), the
> > make install of the nvidia driver also runs makedevices.sh (a vendor sp
> > script that makes the devnodes. This may also have been put in the
> > initscripts (mine isn't, but i tend to use the tar.gz fmt, not using the RPMs)
> > Perhaps there is no check for devfs (likely will be fixed in the next
> > release, as this is a new situation)
>
> There is now a 2313 version of the driver. It has put in devfs
> calls, but it seems they still call the makedefs script in the make
> install.

What's important is whether something has been added to the boot
scripts which create these device nodes in /dev.

> I don't know if the devfs code is correct but here it is.
>
> from nv.c modules_init();
>
> #ifdef CONFIG_DEVFS_FS
> rc = devfs_register_chrdev(nv_major, "nvidia", &nv_fops);
> #else
> rc = register_chrdev(nv_major, "nvidia", &nv_fops);
> #endif
>
> if (rc < 0) {
> NV_EMSG((nv_state_t *) 0, "init_module: register failed");
> return rc;
> }
>
> osMemSet(nv_linux_devices, 0, sizeof(nv_linux_state_t) * NV_MAX_DEVICES);
> num_devices = nvos_probe_devices();
>
> #ifdef CONFIG_DEVFS_FS
> osMemSet(nv_dev_handle, 0, sizeof(devfs_handle_t) * NV_MAX_DEVICES);
> do {
> char name[16];
> int i;
>
> nv_ctl_handle = devfs_register(NULL, "nvidiactl",
> DEVFS_FL_DEFAULT, nv_major, 255,
> S_IFCHR | S_IRUGO | S_IWUGO,
> &nv_fops, NULL);
>
> for (i = 0; i < num_devices; i++) {
> snprintf(name, 16, "nvidia%d", i);
> nv_dev_handle[i] = devfs_register(NULL, name,
> DEVFS_FL_DEFAULT, nv_major, i,
> S_IFCHR | S_IRUGO | S_IWUGO,
> &nv_fops, NULL);
> }
> } while(0);
> #endif

This appears reasonable. However, if they call this initialisation
code twice, it's a bug.

Regards,

Richard....
Permanent: rgooch@atnf.csiro.au
Current: rgooch@ras.ucalgary.ca
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/