All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Mahoney <jeffm@suse.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] o2nm: Get rid of arguments to the timeout routines
Date: Sat Mar 22 11:31:08 2008	[thread overview]
Message-ID: <47E5505A.5010309@suse.com> (raw)
In-Reply-To: <20080322153551.GG27205@ZenIV.linux.org.uk>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Mark Fasheh wrote:
> On Mon, Mar 17, 2008 at 02:06:06PM -0400, Jeff Mahoney wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>>
>>  We keep seeing bug reports related to NULL pointer derefs in
>>  o2net_set_nn_state(). When I originally wrote up the configurable timeout
>>  patch, I had tried to plan for multiple clusters. This was silly.
>>
>>  The timeout routines all use o2nm_single_cluster so there's no point
>>  in passing an argument at all. This patch removes the arguments and kills
>>  those bugs dead.
>>
>> Signed-off-by: Jeff Mahoney <jeffm@suse.com>
>> - ---
>>  fs/ocfs2/cluster/tcp.c |   45 +++++++++++++++++++--------------------------
>>  1 file changed, 19 insertions(+), 26 deletions(-)
>>
>> - --- a/fs/ocfs2/cluster/tcp.c
>> +++ b/fs/ocfs2/cluster/tcp.c
>> @@ -149,23 +149,17 @@ static void o2net_idle_timer(unsigned lo
>>  static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
>>  static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
>>  
>> - -/*
>> - - * FIXME: These should use to_o2nm_cluster_from_node(), but we end up
>> - - * losing our parent link to the cluster during shutdown. This can be
>> - - * solved by adding a pre-removal callback to configfs, or passing
>> - - * around the cluster with the node. -jeffm
>> - - */
>> - -static inline int o2net_reconnect_delay(struct o2nm_node *node)
>> +static inline int o2net_reconnect_delay(void)
>>  {
>>  	return o2nm_single_cluster->cl_reconnect_delay_ms;
>>  }
> 
> 
> That all looks fine, but it seems that the patch is a diff of a diff. Was
> that intentional? Neither git nor I have any idea how to handle something like this
> :)

It's the escaping from PGP/MIME I think. I'll attach it instead.

- -Jeff

- --
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.8 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iEYEARECAAYFAkflUFoACgkQLPWxlyuTD7IBXACgirDpGmc3JEEr0YQeskNgl34J
jU0An1IWU8b97M6WXxVqDXo5kJl9dhLY
=9rre
-----END PGP SIGNATURE-----
-------------- next part --------------
From: Jeff Mahoney <jeffm@suse.com>
Subject: [PATCH] o2nm: Get rid of arguments to the timeout routines
References: 371574

 We keep seeing bug reports related to NULL pointer derefs in
 o2net_set_nn_state(). When I originally wrote up the configurable timeout
 patch, I had tried to plan for multiple clusters. This was silly.

 The timeout routines all use o2nm_single_cluster so there's no point
 in passing an argument at all. This patch removes the arguments and kills
 those bugs dead.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
 fs/ocfs2/cluster/tcp.c |   47 ++++++++++++++++++++---------------------------
 1 file changed, 20 insertions(+), 27 deletions(-)

--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -149,23 +149,17 @@ static void o2net_idle_timer(unsigned lo
 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
 
-/*
- * FIXME: These should use to_o2nm_cluster_from_node(), but we end up
- * losing our parent link to the cluster during shutdown. This can be
- * solved by adding a pre-removal callback to configfs, or passing
- * around the cluster with the node. -jeffm
- */
-static inline int o2net_reconnect_delay(struct o2nm_node *node)
+static inline int o2net_reconnect_delay(void)
 {
 	return o2nm_single_cluster->cl_reconnect_delay_ms;
 }
 
-static inline int o2net_keepalive_delay(struct o2nm_node *node)
+static inline int o2net_keepalive_delay(void)
 {
 	return o2nm_single_cluster->cl_keepalive_delay_ms;
 }
 
-static inline int o2net_idle_timeout(struct o2nm_node *node)
+static inline int o2net_idle_timeout(void)
 {
 	return o2nm_single_cluster->cl_idle_timeout_ms;
 }
@@ -451,9 +445,9 @@ static void o2net_set_nn_state(struct o2
 		/* delay if we're withing a RECONNECT_DELAY of the
 		 * last attempt */
 		delay = (nn->nn_last_connect_attempt +
-			 msecs_to_jiffies(o2net_reconnect_delay(NULL)))
+			 msecs_to_jiffies(o2net_reconnect_delay()))
 			- jiffies;
-		if (delay > msecs_to_jiffies(o2net_reconnect_delay(NULL)))
+		if (delay > msecs_to_jiffies(o2net_reconnect_delay()))
 			delay = 0;
 		mlog(ML_CONN, "queueing conn attempt in %lu jiffies\n", delay);
 		queue_delayed_work(o2net_wq, &nn->nn_connect_work, delay);
@@ -467,7 +461,7 @@ static void o2net_set_nn_state(struct o2
 		 * the connect_expired work will do anything.  The rest will see
 		 * that it's already queued and do nothing.
 		 */
-		delay += msecs_to_jiffies(o2net_idle_timeout(sc->sc_node));
+		delay += msecs_to_jiffies(o2net_idle_timeout());
 		queue_delayed_work(o2net_wq, &nn->nn_connect_expired, delay);
 	}
 
@@ -1167,23 +1161,23 @@ static int o2net_check_handshake(struct 
 	 * but isn't. This can ultimately cause corruption.
 	 */
 	if (be32_to_cpu(hand->o2net_idle_timeout_ms) !=
-				o2net_idle_timeout(sc->sc_node)) {
+				o2net_idle_timeout()) {
 		mlog(ML_NOTICE, SC_NODEF_FMT " uses a network idle timeout of "
 		     "%u ms, but we use %u ms locally.  disconnecting\n",
 		     SC_NODEF_ARGS(sc),
 		     be32_to_cpu(hand->o2net_idle_timeout_ms),
-		     o2net_idle_timeout(sc->sc_node));
+		     o2net_idle_timeout());
 		o2net_ensure_shutdown(nn, sc, -ENOTCONN);
 		return -1;
 	}
 
 	if (be32_to_cpu(hand->o2net_keepalive_delay_ms) !=
-			o2net_keepalive_delay(sc->sc_node)) {
+			o2net_keepalive_delay()) {
 		mlog(ML_NOTICE, SC_NODEF_FMT " uses a keepalive delay of "
 		     "%u ms, but we use %u ms locally.  disconnecting\n",
 		     SC_NODEF_ARGS(sc),
 		     be32_to_cpu(hand->o2net_keepalive_delay_ms),
-		     o2net_keepalive_delay(sc->sc_node));
+		     o2net_keepalive_delay());
 		o2net_ensure_shutdown(nn, sc, -ENOTCONN);
 		return -1;
 	}
@@ -1361,12 +1355,11 @@ static void o2net_initialize_handshake(v
 {
 	o2net_hand->o2hb_heartbeat_timeout_ms = cpu_to_be32(
 		O2HB_MAX_WRITE_TIMEOUT_MS);
-	o2net_hand->o2net_idle_timeout_ms = cpu_to_be32(
-		o2net_idle_timeout(NULL));
+	o2net_hand->o2net_idle_timeout_ms = cpu_to_be32(o2net_idle_timeout());
 	o2net_hand->o2net_keepalive_delay_ms = cpu_to_be32(
-		o2net_keepalive_delay(NULL));
+		o2net_keepalive_delay());
 	o2net_hand->o2net_reconnect_delay_ms = cpu_to_be32(
-		o2net_reconnect_delay(NULL));
+		o2net_reconnect_delay());
 }
 
 /* ------------------------------------------------------------ */
@@ -1412,8 +1405,8 @@ static void o2net_idle_timer(unsigned lo
 
 	printk(KERN_INFO "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u "
 	     "seconds, shutting it down.\n", SC_NODEF_ARGS(sc),
-		     o2net_idle_timeout(sc->sc_node) / 1000,
-		     o2net_idle_timeout(sc->sc_node) % 1000);
+		     o2net_idle_timeout() / 1000,
+		     o2net_idle_timeout() % 1000);
 	mlog(ML_NOTICE, "here are some times that might help debug the "
 	     "situation: (tmr %ld.%ld now %ld.%ld dr %ld.%ld adv "
 	     "%ld.%ld:%ld.%ld func (%08x:%u) %ld.%ld:%ld.%ld)\n",
@@ -1441,10 +1434,10 @@ static void o2net_sc_reset_idle_timer(st
 {
 	o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work);
 	o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work,
-		      msecs_to_jiffies(o2net_keepalive_delay(sc->sc_node)));
+		      msecs_to_jiffies(o2net_keepalive_delay()));
 	do_gettimeofday(&sc->sc_tv_timer);
 	mod_timer(&sc->sc_idle_timeout,
-	       jiffies + msecs_to_jiffies(o2net_idle_timeout(sc->sc_node)));
+	       jiffies + msecs_to_jiffies(o2net_idle_timeout()));
 }
 
 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc)
@@ -1586,8 +1579,8 @@ static void o2net_connect_expired(kapi_w
 		mlog(ML_ERROR, "no connection established with node %u after "
 		     "%u.%u seconds, giving up and returning errors.\n",
 		     o2net_num_from_nn(nn),
-		     o2net_idle_timeout(NULL) / 1000,
-		     o2net_idle_timeout(NULL) % 1000);
+		     o2net_idle_timeout() / 1000,
+		     o2net_idle_timeout() % 1000);
 
 		o2net_set_nn_state(nn, NULL, 0, -ENOTCONN);
 	}
@@ -1642,7 +1635,7 @@ static void o2net_hb_node_up_cb(struct o
 
 	/* ensure an immediate connect attempt */
 	nn->nn_last_connect_attempt = jiffies -
-		(msecs_to_jiffies(o2net_reconnect_delay(node)) + 1);
+		(msecs_to_jiffies(o2net_reconnect_delay()) + 1);
 
 	if (node_num != o2nm_this_node()) {
 		/* believe it or not, accept and node hearbeating testing

      reply	other threads:[~2008-03-22 11:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-17 11:06 [Ocfs2-devel] [PATCH] o2nm: Get rid of arguments to the timeout routines Jeff Mahoney
2008-03-17 17:00 ` [Ocfs2-devel] " Sunil Mushran
2008-03-22  8:36 ` [Ocfs2-devel] " Mark Fasheh
2008-03-22 11:31   ` Jeff Mahoney [this message]

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=47E5505A.5010309@suse.com \
    --to=jeffm@suse.com \
    --cc=ocfs2-devel@oss.oracle.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.