mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Steven Rostedt <srostedt@redhat.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 08/64] debugfs: dont stop on first failed recursive delete
Date: Mon, 15 Jun 2009 22:45:57 -0700	[thread overview]
Message-ID: <1245131213-24168-8-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20090616051351.GA23627@kroah.com>

From: Steven Rostedt <srostedt@redhat.com>

debugfs: dont stop on first failed recursive delete

While running a while loop of removing a module that removes a debugfs
directory with debugfs_remove_recursive, and at the same time doing a
while loop of cat of a file in that directory, I would hit a point where
somehow the cat of the file caused the remove to fail.

The result is that other files did not get removed when the module
was removed. I simple read of one of those file can oops the kernel
because the operations to the file no longer exist (removed by module).

The funny thing is that the file being cat'ed was removed. It was
the siblings that were not. I see in the code to debugfs_remove_recursive
there's a test that checks if the child fails to bail out of the loop
to prevent an infinite loop.

What this patch does is to still try any siblings in that directory.
If all the siblings fail, or there are no more siblings, then we exit
the loop.

This fixes the above symptom, but...

This is no full proof. It makes the debugfs_remove_recursive a bit more
robust, but it does not explain why the one file failed. There may
be some kind of delay deletion that makes the debugfs think it did
not succeed. So this patch is more of a fix for the symptom but not
the disease.

This patch still makes the debugfs_remove_recursive more robust and
until I can find out why the bug exists, this patch will keep
the kernel from oopsing in most cases.  Even after the cause is found
I think this change can stand on its own and should be kept.

[ Impact: prevent kernel oops on module unload and reading debugfs files ]

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 fs/debugfs/inode.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index 0662ba6..d22438e 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -403,6 +403,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
 		}
 		child = list_entry(parent->d_subdirs.next, struct dentry,
 				d_u.d_child);
+ next_sibling:
 
 		/*
 		 * If "child" isn't empty, walk down the tree and
@@ -417,6 +418,16 @@ void debugfs_remove_recursive(struct dentry *dentry)
 		__debugfs_remove(child, parent);
 		if (parent->d_subdirs.next == &child->d_u.d_child) {
 			/*
+			 * Try the next sibling.
+			 */
+			if (child->d_u.d_child.next != &parent->d_subdirs) {
+				child = list_entry(child->d_u.d_child.next,
+						   struct dentry,
+						   d_u.d_child);
+				goto next_sibling;
+			}
+
+			/*
 			 * Avoid infinite loop if we fail to remove
 			 * one dentry.
 			 */
-- 
1.6.3.2


  parent reply	other threads:[~2009-06-16  5:53 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-16  5:13 [GIT PATCH] driver core patches for 2.6.30-git Greg KH
2009-06-16  5:45 ` [PATCH 01/64] driver core: set default SYSFS_DEPRECATED=n Greg Kroah-Hartman
2009-06-24 15:02   ` Pavel Machek
2009-06-16  5:45 ` [PATCH 02/64] sched: delayed cleanup of user_struct Greg Kroah-Hartman
2009-06-16  5:45 ` [PATCH 03/64] Driver Core: Warn driver authors about adding device attributes Greg Kroah-Hartman
2009-06-16  5:45 ` [PATCH 04/64] Sysfs: fix possible memleak in sysfs_follow_link Greg Kroah-Hartman
2009-06-16  5:45 ` [PATCH 05/64] driver core: firmware_class: replace kfree(dev) with put_device(dev) Greg Kroah-Hartman
2009-06-16  5:45 ` [PATCH 06/64] driver core: add BUS_NOTIFY_UNBOUND_DRIVER event Greg Kroah-Hartman
2009-06-16  5:45 ` [PATCH 07/64] driver core: Const-correct platform getbyname functions Greg Kroah-Hartman
2009-06-16  5:45 ` Greg Kroah-Hartman [this message]
2009-06-16  5:45 ` [PATCH 09/64] Driver core: fix comment for device_attach() Greg Kroah-Hartman
2009-06-16  5:45 ` [PATCH 10/64] kobject: make kset_create check kobject_set_name return value Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 11/64] driver-core: make sysdev_class_register " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 12/64] debugfs: fix docbook error Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 13/64] driver core: synchronize device shutdown Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 14/64] kobject: samples: make SAMPLE_KOBJECT module-only Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 15/64] driver core: fix documentation of request_firmware_nowait Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 16/64] firmware: allocate firmware id dynamically Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 17/64] firmware: atm/ueagle-atm: prepare for FIRMWARE_NAME_MAX removal Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 18/64] firmware: tuners/xc2028: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 19/64] firmware: dvb/dvb-usb: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 20/64] firmware: pcmcia/ds: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 21/64] firmware: wireless/libertas: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 22/64] firmware: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 23/64] firmware: remove broken example files Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 24/64] driver core: fix gcc 4.3.3 warnings about string literals Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 25/64] Driver Core: add nodename callbacks Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 26/64] Driver Core: misc: add nodename support for misc devices Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 27/64] Driver Core: usb: add nodename support for usb drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 28/64] Driver Core: block: add nodename support for block drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 29/64] Driver Core: x86: add nodename for cpuid and msr drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 30/64] Driver Core: dvb: add nodename for dvb drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 31/64] Driver Core: input: add nodename for input drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 32/64] Driver Core: sound: add nodename for sound drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 33/64] Driver Core: raw: add nodename for raw devices Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 34/64] Driver Core: drm: add nodename for drm devices Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 35/64] Driver Core: aoe: add nodename for aoe devices Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 36/64] Driver Core: bsg: add nodename for bsg driver Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 37/64] eisa: remove driver_data direct access of struct device Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 38/64] firewire: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 39/64] ide: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 40/64] ieee1394: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 41/64] infiniband: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 42/64] input: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 43/64] media: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 44/64] mfd: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 45/64] PCIE: " Greg Kroah-Hartman
2009-06-16 17:13   ` Jesse Barnes
2009-06-16 17:17     ` Greg KH
2009-06-16  5:46 ` [PATCH 46/64] pcmcia: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 47/64] scsi: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 48/64] thermal: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 49/64] xen block: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 50/64] hvcs: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 51/64] ibmvscsi: gadget: at91_udc: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 52/64] infiniband: ehca: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 53/64] ipmi: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 54/64] mips: " Greg Kroah-Hartman
2009-06-16  9:31   ` Ralf Baechle
2009-06-16 16:25     ` Greg KH
2009-06-16  5:46 ` [PATCH 55/64] of_serial: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 56/64] parisc: " Greg Kroah-Hartman
2009-06-16 15:15   ` Kyle McMartin
2009-06-16 16:25     ` Greg KH
2009-06-16 17:24       ` Kyle McMartin
2009-06-16  5:46 ` [PATCH 57/64] parport: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 58/64] s390: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 59/64] block/ps3: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 60/64] uml: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 61/64] usb: gadget: at91_udc: " Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 62/64] xen: remove driver_data direct access of struct device from more drivers Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 63/64] debugfs: Fix terminology inconsistency of dir name to mount debugfs filesystem Greg Kroah-Hartman
2009-06-16  5:46 ` [PATCH 64/64] debugfs: use specified mode to possibly mark files read/write only Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1245131213-24168-8-git-send-email-gregkh@suse.de \
    --to=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=srostedt@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®