linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net/sysfs: Remove devices without receive buffers
@ 2018-10-13 22:05 Michael Bringmann
  2018-10-13 23:50 ` David Miller
  0 siblings, 1 reply; 2+ messages in thread
From: Michael Bringmann @ 2018-10-13 22:05 UTC (permalink / raw)
  To: netdev, linux-kernel, mwb
  Cc: David S. Miller, Alexander Duyck, Tyler Hicks, Jeff Kirsher,
	Amritha Nambiar, Joe Perches, Dmitry Torokhov, David Decotigny,
	Roopa Prabhu, Cong Wang, Nathan Fontenot, Juliet Kim,
	Tyrel Datwyler, Thomas Falcon

Testing ran into a case where a network device was created and
initialized, but then removed from the system before accepting
traffic through it.  In this case, no receive buffers were added
to the device prior to attempting to release the driver.  This
resulted in generation of a WARNING notice/stack trace in the
console log like,

kobject: '(null)' (c0000009e028a310): is not initialized, yet kobject_put() is being called.
------------[ cut here ]------------
WARNING: CPU: 1 PID: 7689 at lib/kobject.c:661 kobject_put+0x2a8/0x370
Modules linked in: bonding iptable_filter rpadlpar_io rpaphp tcp_diag udp_diag inet_diag unix_diag af_packet_diag netlink_diag btrfs raid6_pq pseries_rng xor sg ibmvnic nfsd auth_rpcgss nfs_acl lockd grace sunrpc binfmt_misc ip_tables xfs libcrc32c sd_mod crc_t10dif crct10dif_generic crct10dif_common ibmvscsi scsi_transport_srp ibmvfc scsi_transport_fc ibmveth scsi_tgt dm_mirror dm_region_hash dm_log dm_mod [last unloaded: bonding]
CPU: 1 PID: 7689 Comm: drmgr Kdump: loaded Not tainted 3.10.0-948.el7.ppc64le #1
task: c0000009ddb55c00 ti: c0000009daea8000 task.ti: c0000009daea8000
NIP: c000000000551ff8 LR: c000000000551ff4 CTR: 0000000000770c6c
REGS: c0000009daeab4a0 TRAP: 0700   Not tainted  (3.10.0-948.el7.ppc64le)
MSR: 8000000100029033 <SF,EE,ME,IR,DR,RI,LE>  CR: 28088822  XER: 0000000d
CFAR: c000000000a97f78 SOFTE: 1
00551ff4 c0000009daeab720 c0000000013e4d00 000000000000005c
0194a820 c00000000195d728 0000bc6bd731da26 00000000000000ec
00000007 0000000000000000 0000000000ad0000 0000000000000000
00008000 c000000007af0900 0000000000000000 0000000000000000
00000000 0000000000000000 0000000000000000 0000000000000000
00000000 0000000000000000 0000000000000000 0000000000000007
00d19c28 c000000000d19c50 0000000000000000 0000000000000000
d7dca000 c0000009e364da00 0000000000000005 c0000009e028a310
NIP [c000000000551ff8] kobject_put+0x2a8/0x370
LR [c000000000551ff4] kobject_put+0x2a4/0x370
Call Trace:
[c0000009daeab720] [c000000000551ff4] kobject_put+0x2a4/0x370 (unreliable)
[c0000009daeab7b0] [c000000000905ae8] net_rx_queue_update_kobjects+0x128/0x190
[c0000009daeab860] [c000000000905d78] netdev_unregister_kobject+0x48/0xa0
[c0000009daeab890] [c0000000008d35f4] rollback_registered_many+0x374/0x4e0
[c0000009daeab950] [c0000000008d38f8] unregister_netdev+0x68/0xf0
[c0000009daeab9d0] [d00000000aac95d4] ibmvnic_remove+0x54/0x190 [ibmvnic]
[c0000009daeaba10] [c00000000003f744] vio_bus_remove+0x64/0xf0
[c0000009daeaba50] [c0000000006b3a30] device_release_driver+0xf0/0x1b0
[c0000009daeaba90] [c0000000006b2d10] bus_remove_device+0x180/0x220
[c0000009daeabb10] [c0000000006ab9ac] device_del+0x1fc/0x3b0
[c0000009daeabba0] [c0000000006abb9c] device_unregister+0x3c/0xa0
[c0000009daeabc10] [c00000000003f49c] vio_unregister_device+0x2c/0x60
[c0000009daeabc40] [d00000000eb0093c] dlpar_remove_slot+0x28c/0x340 [rpadlpar_io]
[c0000009daeabcd0] [d00000000eb00b1c] remove_slot_store+0x8c/0xd0 [rpadlpar_io]
[c0000009daeabd40] [c0000000005516d0] kobj_attr_store+0x30/0x60
[c0000009daeabd60] [c00000000044c97c] sysfs_kf_write+0x6c/0xa0
[c0000009daeabd80] [c00000000044b7d0] kernfs_fop_write+0x150/0x1e0
[c0000009daeabdd0] [c000000000369e74] SyS_write+0x164/0x430
[c0000009daeabe30] [c00000000000a284] system_call+0x38/0xfc

This patch removes the warning for unitialized receive queues.

Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
---
 net/core/net-sysfs.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index bd67c4d..a1d3f67 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -971,6 +971,8 @@ static int rx_queue_add_kobject(struct net_device *dev, int index)
 	while (--i >= new_num) {
 		struct kobject *kobj = &dev->_rx[i].kobj;
 
+		if (!kobj->state_initialized)
+			continue;
 		if (!refcount_read(&dev_net(dev)->count))
 			kobj->uevent_suppress = 1;
 		if (dev->sysfs_rx_queue_group)


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] net/sysfs: Remove devices without receive buffers
  2018-10-13 22:05 [PATCH] net/sysfs: Remove devices without receive buffers Michael Bringmann
@ 2018-10-13 23:50 ` David Miller
  0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2018-10-13 23:50 UTC (permalink / raw)
  To: mwb
  Cc: netdev, linux-kernel, alexander.h.duyck, tyhicks,
	jeffrey.t.kirsher, amritha.nambiar, joe, dmitry.torokhov, decot,
	roopa, xiyou.wangcong, nfont, minkim, tyreld, tlfalcon

From: Michael Bringmann <mwb@linux.vnet.ibm.com>
Date: Sat, 13 Oct 2018 17:05:28 -0500

> Testing ran into a case where a network device was created and
> initialized, but then removed from the system before accepting
> traffic through it.  In this case, no receive buffers were added
> to the device prior to attempting to release the driver.  This
> resulted in generation of a WARNING notice/stack trace in the
> console log like,

That's not legal.

The device must setup all of this kind of state before calling
register_netdevice().  And this must happen for reasons other than the
crash situation mentioned here.

Please fix the ibmvnic driver to not register partially setup netdev
objects.

Thank you.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-10-13 23:51 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-13 22:05 [PATCH] net/sysfs: Remove devices without receive buffers Michael Bringmann
2018-10-13 23:50 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).