This problem has been resolved (sort of). See the follow up to
"[PATCH] to deal with bad dev->refcnt in unregister_netdevice()"
Thomas Hood
> Here is a patch which may not solve the underlying
> problem but which does prevent the kernel from
> generating an infinite number of error messages
> on "cardctl eject" and from hanging up on shutdown.
>
> ----------------------------------------------------
> jdthood@thanatos:/usr/src/kernel-source-2.4.1-ac3/net/core# diff dev.c_ORIG dev.c
> 2558c2558
> < while (atomic_read(&dev->refcnt) != 1) {
> ---
> > while (atomic_read(&dev->refcnt) > 1) {
> -----------------------------------------------------
>
> The underlying problem is that refcnt is zero or less
> at this point. This is erroneous. The error in
> maintaining the refcnt appears to occur only when
> I configure the eth0 interface using pump or dhclient.
> Be that as it may, because of the erroneous refcnt,
> this while loop loops forever in the original. As
> modified it falls through; and this makes the kernel
> usable for me.
>
> I hope the networking gurus can find the real bug.
>
> Thomas Hood
>