From: Pete Zaitcev <zaitcev@redhat.com>
To: Fabio Coatti <cova@ferrara.linux.it>
Cc: Andrew Morton <akpm@osdl.org>,
linux-kernel@vger.kernel.org,
linux-usb-devel@lists.sourceforge.net, zaitcev@redhat.com,
linux-scsi@vger.kernel.org
Subject: Re: 2.6.10-rc2-mm2 usb storage still oopses
Date: Thu, 18 Nov 2004 15:55:42 -0800 [thread overview]
Message-ID: <20041118155542.324f56c7@lembas.zaitcev.lan> (raw)
In-Reply-To: <200411190042.41199.cova@ferrara.linux.it>
On Fri, 19 Nov 2004 00:42:40 +0100, Fabio Coatti <cova@ferrara.linux.it> wrote:
> Nov 18 20:33:05 kefk kernel: sdb: assuming drive cache: write through
> Nov 18 20:33:05 kefk kernel: sdb: sdb1
> Nov 18 20:33:05 kefk kernel: sdb: sdb1
> Nov 18 20:33:05 kefk kernel: kobject_register failed for sdb1 (-17)
This looks as if SCSI falls victim of the general problem which ub addresses
with the following fragment:
--- linux-2.6.10-rc1/drivers/block/ub.c 2004-10-28 09:46:38.000000000 -0700
+++ linux-2.6.10-rc1-ub/drivers/block/ub.c 2004-11-06 23:59:20.000000000 -0800
@@ -267,6 +263,7 @@ struct ub_dev {
int changed; /* Media was changed */
int removable;
int readonly;
+ int first_open; /* Kludge. See ub_bd_open. */
char name[8];
struct usb_device *dev;
struct usb_interface *intf;
@@ -1428,6 +1420,26 @@ static int ub_bd_open(struct inode *inod
sc->openc++;
spin_unlock_irqrestore(&ub_lock, flags);
+ /*
+ * This is a workaround for a specific problem in our block layer.
+ * In 2.6.9, register_disk duplicates the code from rescan_partitions.
+ * However, if we do add_disk with a device which persistently reports
+ * a changed media, add_disk calls register_disk, which does do_open,
+ * which will call rescan_paritions for changed media. After that,
+ * register_disk attempts to do it all again and causes double kobject
+ * registration and a eventually an oops on module removal.
+ *
+ * The bottom line is, Al Viro says that we should not allow
+ * bdev->bd_invalidated to be set when doing add_disk no matter what.
+ */
+ if (sc->first_open) {
+ if (sc->changed) {
+ sc->first_open = 0;
+ rc = -ENOMEDIUM;
+ goto err_open;
+ }
+ }
+
if (sc->removable || sc->readonly)
check_disk_change(inode->i_bdev);
@@ -1467,6 +1479,8 @@ static int ub_bd_release(struct inode *i
spin_lock_irqsave(&ub_lock, flags);
--sc->openc;
+ if (sc->openc == 0)
+ sc->first_open = 0;
if (sc->openc == 0 && atomic_read(&sc->poison))
ub_cleanup(sc);
spin_unlock_irqrestore(&ub_lock, flags);
@@ -1919,6 +1932,8 @@ static int ub_probe(struct usb_interface
}
sc->removable = 1; /* XXX Query this from the device */
+ sc->changed = 1; /* ub_revalidate clears only */
+ sc->first_open = 1;
ub_revalidate(sc);
/* This is pretty much a long term P3 */
This feels kludgy, but my excuse is "James and Viro made me do it".
I have an IRC log to prove it laying somewhere...
I'm adding the linux-scsi to cc: in case any comments are forthcoming.
-- Pete
next prev parent reply other threads:[~2004-11-19 0:00 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-18 21:03 Fabio Coatti
2004-11-18 21:35 ` Andrew Morton
2004-11-18 21:58 ` Pete Zaitcev
2004-11-18 23:42 ` Fabio Coatti
2004-11-18 23:55 ` Pete Zaitcev [this message]
2004-11-30 0:32 ` Andrew Morton
2004-11-30 3:22 ` James Bottomley
2004-11-30 9:13 ` Fabio Coatti
2004-11-30 19:27 ` Fabio Coatti
2004-11-30 20:58 ` [linux-usb-devel] " Alan Stern
2004-12-01 1:06 ` Fabio Coatti
2004-11-19 2:41 ` Maneesh Soni
2004-11-19 16:47 ` Greg KH
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=20041118155542.324f56c7@lembas.zaitcev.lan \
--to=zaitcev@redhat.com \
--cc=akpm@osdl.org \
--cc=cova@ferrara.linux.it \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux-usb-devel@lists.sourceforge.net \
/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®