From: Stefan Richter <stefanr@s5r6.in-berlin.de>
To: Chris Boot <bootc@bootc.net>
Cc: linux1394-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org,
Greg KH <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 2/3] firewire-sbp2: Ignore SBP-2 targets on the local node
Date: Sat, 11 Feb 2012 12:28:32 +0100 [thread overview]
Message-ID: <20120211122832.25f00d59@stein> (raw)
In-Reply-To: <1328881314-26544-3-git-send-email-bootc@bootc.net>
On Feb 10 Chris Boot wrote:
> The firewire-sbp2 module tries to login to an SBP-2/3 target even when
> it is running on the local node, which fails because of the inability to
> fetch data from DMA mapped regions using firewire transactions on the
> local node. It also doesn't make much sense to have the initiator and
> target on the same node, so this patch prevents this behaviour.
>
> Signed-off-by: Chris Boot <bootc@bootc.net>
> Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>
> ---
> drivers/firewire/sbp2.c | 19 +++++++++++++++++--
> 1 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
> index ed5bbbf..1572a79 100644
> --- a/drivers/firewire/sbp2.c
> +++ b/drivers/firewire/sbp2.c
> @@ -1138,6 +1138,12 @@ static int sbp2_probe(struct device *dev)
> struct Scsi_Host *shost;
> u32 model, firmware_revision;
>
> + /* ignore targets on the local node */
> + if (device->node == device->card->local_node) {
> + dev_set_drvdata(&unit->device, NULL);
> + return 0;
> + }
> +
> if (dma_get_max_seg_size(device->card->device) > SBP2_MAX_SEG_SIZE)
> BUG_ON(dma_set_max_seg_size(device->card->device,
> SBP2_MAX_SEG_SIZE));
> @@ -1204,6 +1210,10 @@ static void sbp2_update(struct fw_unit *unit)
> struct sbp2_target *tgt = dev_get_drvdata(&unit->device);
> struct sbp2_logical_unit *lu;
>
> + /* no drvdata means a target on a local node; ignoring */
> + if (!tgt)
> + return;
> +
> fw_device_enable_phys_dma(fw_parent_device(unit));
>
> /*
> @@ -1223,10 +1233,15 @@ static int sbp2_remove(struct device *dev)
> struct fw_device *device = fw_parent_device(unit);
> struct sbp2_target *tgt = dev_get_drvdata(&unit->device);
> struct sbp2_logical_unit *lu, *next;
> - struct Scsi_Host *shost =
> - container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
> + struct Scsi_Host *shost;
> struct scsi_device *sdev;
>
> + /* no drvdata means a target on a local node; ignoring */
> + if (!tgt)
> + return 0;
> +
> + shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
> +
> /* prevent deadlocks */
> sbp2_unblock(tgt);
>
In the long run, we might want to support target and initiator set up to
reside on the same node and talking to each other via loopback, if
somebody really needs it and if it can be done with reasonably little
effort. Until then, the patch is fine with me WRT what it accomplishes.
But I do wonder: Shouldn't this be implemented by returning from the
driver probe method with an error? If so, which errno should be
returned? (Cc'ing driver core maintainer for this question.)
--
Stefan Richter
-=====-===-- --=- -=-==
http://arcgraph.de/sr/
next prev parent reply other threads:[~2012-02-11 11:28 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <EE1CAC85-DF0C-4C21-B2BD-446C481C938F@bootc.net>
2012-02-10 13:41 ` [PATCH 0/3] firewire-sbp2: Various fixes Chris Boot
2012-02-10 13:41 ` [PATCH 1/3] firewire-sbp2: Take into account Unit_Unique_ID Chris Boot
2012-02-11 11:12 ` Stefan Richter
2012-02-11 12:26 ` Chris Boot
2012-02-11 13:06 ` Stefan Richter
2012-02-10 13:41 ` [PATCH 2/3] firewire-sbp2: Ignore SBP-2 targets on the local node Chris Boot
2012-02-11 11:28 ` Stefan Richter [this message]
2012-02-11 12:16 ` Clemens Ladisch
2012-02-11 12:31 ` Chris Boot
2012-02-11 15:46 ` Clemens Ladisch
2012-02-11 15:49 ` Chris Boot
2012-02-11 11:56 ` Stefan Richter
2012-02-11 12:32 ` Chris Boot
2012-02-10 13:41 ` [PATCH 3/3] firewire-sbp2: Fix SCSI sense data mangling Chris Boot
2012-02-15 14:59 ` [PATCH v2 0/3] firewire-sbp2: Various fixes Chris Boot
2012-02-15 14:59 ` [PATCH v2 1/3] firewire-sbp2: Take into account Unit_Unique_ID Chris Boot
2012-02-15 14:59 ` [PATCH v2 2/3] firewire-sbp2: Ignore SBP-2 targets on the local node Chris Boot
2012-02-15 14:59 ` [PATCH v2 3/3] firewire-sbp2: Fix SCSI sense data mangling Chris Boot
2012-02-22 22:17 ` [PATCH v2 0/3] firewire-sbp2: Various fixes Stefan Richter
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=20120211122832.25f00d59@stein \
--to=stefanr@s5r6.in-berlin.de \
--cc=bootc@bootc.net \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux1394-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;
as well as URLs for NNTP newsgroup(s).