From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Pete Zaitcev <zaitcev@redhat.com>
Cc: Linux Kernel list <linux-kernel@vger.kernel.org>
Subject: Re: [BUG] ub.c badness in current bk
Date: Fri, 17 Sep 2004 19:46:34 +1000 [thread overview]
Message-ID: <1095414394.13531.77.camel@gaston> (raw)
In-Reply-To: <20040917002935.77620d1d@lembas.zaitcev.lan>
Ok, here's a modified patch that fixes the problem for me. As you
noticed, it seems the changed flag need to be one-shot, but your
code that "made" changed didn't follow that logic. Note that in
it's current form, the "new" function is equivalent to getting rid
of the "changed" flag completely and just returning the result of
ub_sync_tur(). I'll let you do that though if you think it's
correct.
Ben.
===== drivers/block/ub.c 1.5 vs edited =====
--- 1.5/drivers/block/ub.c 2004-08-24 10:02:30 +10:00
+++ edited/drivers/block/ub.c 2004-09-17 19:44:04 +10:00
@@ -1217,9 +1217,18 @@
goto error;
}
+ /*
+ * ``If the allocation length is eighteen or greater, and a device
+ * server returns less than eithteen bytes of data, the application
+ * client should assume that the bytes not transferred would have been
+ * zeroes had the device server returned those bytes.''
+ */
+
memset(&sc->top_sense, 0, UB_SENSE_SIZE);
+
scmd = &sc->top_rqs_cmd;
scmd->cdb[0] = REQUEST_SENSE;
+ scmd->cdb[4] = UB_SENSE_SIZE;
scmd->cdb_len = 6;
scmd->dir = UB_DIR_READ;
scmd->state = UB_CMDST_INIT;
@@ -1352,7 +1361,6 @@
*/
static void ub_revalidate(struct ub_dev *sc)
{
-
sc->readonly = 0; /* XXX Query this from the device */
/*
@@ -1509,6 +1517,7 @@
static int ub_bd_media_changed(struct gendisk *disk)
{
struct ub_dev *sc = disk->private_data;
+ int ret;
if (!sc->removable)
return 0;
@@ -1525,12 +1534,13 @@
if (ub_sync_tur(sc) != 0) {
sc->changed = 1;
/* P3 */ printk("%s: made changed\n", sc->name);
- return 1;
}
/* The sd.c clears this before returning (one-shot flag). Why? */
- /* P3 */ printk("%s: %s changed\n", sc->name,
- sc->changed? "is": "was not");
+ ret = sc->changed;
+ /* P3 */ printk("%s: %s changed\n", sc->name, ret ? "is": "was not");
+
+ sc->changed = 0;
return sc->changed;
}
next prev parent reply other threads:[~2004-09-17 9:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.1095300780.10032.linux-kernel2news@redhat.com>
2004-09-16 6:17 ` [BUG] ub.c badness in current bk Pete Zaitcev
2004-09-17 7:29 ` Pete Zaitcev
2004-09-17 9:46 ` Benjamin Herrenschmidt [this message]
2004-09-17 16:04 ` Pete Zaitcev
2004-09-18 0:08 ` Benjamin Herrenschmidt
2004-09-18 0:12 ` Benjamin Herrenschmidt
2004-09-18 1:04 ` Benjamin Herrenschmidt
2004-09-18 2:08 ` Benjamin Herrenschmidt
2004-09-20 3:21 ` Pete Zaitcev
2004-09-20 3:37 ` Benjamin Herrenschmidt
2004-09-22 1:44 ` Pete Zaitcev
2004-09-16 2:06 Benjamin Herrenschmidt
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=1095414394.13531.77.camel@gaston \
--to=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=zaitcev@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