Re: [linux-usb-devel] usb+sysfs: duplicate filename 'bInterfaceNumber'

Alan Stern
2007-10-16T14:56:31Z

On Tue, 16 Oct 2007, Dave Young wrote:

> > I finally duplicated this on one of my machines here at boot time, with
> > USB built into the kernel. I'll work tomorrow on tracking this down
> > further...
> Hi,
> I add some printk messages, dump_stack and some others, here is the
> dmesg dump with debug info(lines begin with "hidave"):

Okay, good, the extra printk messages show exactly where the problem
lies.

In usb_set_configuration(), each new interfaces is registered and then
usb_create_sysfs_intf_files() gets called for that interface. This
makes sense, because obviously we can't create sysfs files for an
interface before it is registered.

The problem is that during registration drivers get probed, and drivers
sometimes call usb_set_interface() from their probe method. This
routine also calls usb_create_sysfs_intf_files(), and the result is
that the sysfs files get created twice:

First by usb_set_interface, from the driver probe;

Then by usb_set_configuration, when registration is
finished.

I can think of two possible ways around the problem. One is to add a
bit to the usb_interface structure, recording whether the sysfs files
have been created. The other is always to remove the files just before
trying to create them.

The first seems more workable, although it is slightly awkward. Greg,
what do you think?

Alan Stern