Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5cd54c94b0ba45033c126237d3d70c6e7ab52c3f
Commit:     5cd54c94b0ba45033c126237d3d70c6e7ab52c3f
Parent:     79352e9f94cff4078f2ffefac4a41b7f14046fb6
Author:     Stefan Richter <[EMAIL PROTECTED]>
AuthorDate: Sun Jun 17 23:55:41 2007 +0200
Committer:  Stefan Richter <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 00:07:45 2007 +0200

    firewire: fw-sbp2: implement nonexclusive login
    
    Signed-off-by: Stefan Richter <[EMAIL PROTECTED]>
    Signed-off-by: Kristian Høgsberg <[EMAIL PROTECTED]>
---
 drivers/firewire/fw-sbp2.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
index 846aad8..2c39f19 100644
--- a/drivers/firewire/fw-sbp2.c
+++ b/drivers/firewire/fw-sbp2.c
@@ -30,6 +30,7 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/mod_devicetable.h>
 #include <linux/device.h>
 #include <linux/scatterlist.h>
@@ -47,6 +48,18 @@
 #include "fw-topology.h"
 #include "fw-device.h"
 
+/*
+ * So far only bridges from Oxford Semiconductor are known to support
+ * concurrent logins. Depending on firmware, four or two concurrent logins
+ * are possible on OXFW911 and newer Oxsemi bridges.
+ *
+ * Concurrent logins are useful together with cluster filesystems.
+ */
+static int sbp2_param_exclusive_login = 1;
+module_param_named(exclusive_login, sbp2_param_exclusive_login, bool, 0644);
+MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
+                "(default = Y, use N for concurrent initiators)");
+
 /* I don't know why the SCSI stack doesn't define something like this... */
 typedef void (*scsi_done_fn_t)(struct scsi_cmnd *);
 
@@ -155,7 +168,7 @@ struct sbp2_orb {
 #define MANAGEMENT_ORB_LUN(v)                  ((v))
 #define MANAGEMENT_ORB_FUNCTION(v)             ((v) << 16)
 #define MANAGEMENT_ORB_RECONNECT(v)            ((v) << 20)
-#define MANAGEMENT_ORB_EXCLUSIVE               ((1) << 28)
+#define MANAGEMENT_ORB_EXCLUSIVE(v)            ((v) ? 1 << 28 : 0)
 #define MANAGEMENT_ORB_REQUEST_FORMAT(v)       ((v) << 29)
 #define MANAGEMENT_ORB_NOTIFY                  ((1) << 31)
 
@@ -431,14 +444,9 @@ sbp2_send_management_orb(struct fw_unit *unit, int 
node_id, int generation,
        orb->request.status_fifo.high = sd->address_handler.offset >> 32;
        orb->request.status_fifo.low  = sd->address_handler.offset;
 
-       /*
-        * FIXME: Yeah, ok this isn't elegant, we hardwire exclusive
-        * login and 1 second reconnect time.  The reconnect setting
-        * is probably fine, but the exclusive login should be an option.
-        */
        if (function == SBP2_LOGIN_REQUEST) {
                orb->request.misc |=
-                       MANAGEMENT_ORB_EXCLUSIVE |
+                       MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login) |
                        MANAGEMENT_ORB_RECONNECT(0);
        }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to