linux-watchdog.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Teigland <teigland@redhat.com>
To: linux-watchdog@vger.kernel.org
Subject: [PATCH v2] watchdog: new option to skip ping in close
Date: Tue, 7 Aug 2012 14:27:30 -0400	[thread overview]
Message-ID: <20120807182730.GE29229@redhat.com> (raw)

If a daemon has /dev/watchdog open, and exits (say by crashing or
sigkill), watchdog_release() generates a new watchdog_ping(), extending
the life of the machine.  However, the daemon may require control over
whether or not the watchdog is pinged, and the ping generated by close
compromises this control.

Signed-off-by: David Teigland <teigland@redhat.com>
---
 drivers/watchdog/watchdog_dev.c |    7 ++++++-
 include/linux/watchdog.h        |    2 ++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index ef8edec..47ae7fe 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -394,6 +394,9 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd,
 		if (err)
 			return err;
 		return put_user(val, p);
+	case WDIOC_NOCLOSEPING:
+		set_bit(WDOG_NO_CLOSE_PING, &wdd->status);
+		return 0;
 	default:
 		return -ENOTTY;
 	}
@@ -480,7 +483,9 @@ static int watchdog_release(struct inode *inode, struct file *file)
 		if (!test_bit(WDOG_UNREGISTERED, &wdd->status))
 			dev_crit(wdd->dev, "watchdog did not stop!\n");
 		mutex_unlock(&wdd->lock);
-		watchdog_ping(wdd);
+
+		if (!test_bit(WDOG_NO_CLOSE_PING, &wdd->status))
+			watchdog_ping(wdd);
 	}
 
 	/* Allow the owner module to be unloaded again */
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
index da70f0f..4fa10ff 100644
--- a/include/linux/watchdog.h
+++ b/include/linux/watchdog.h
@@ -31,6 +31,7 @@ struct watchdog_info {
 #define	WDIOC_SETPRETIMEOUT	_IOWR(WATCHDOG_IOCTL_BASE, 8, int)
 #define	WDIOC_GETPRETIMEOUT	_IOR(WATCHDOG_IOCTL_BASE, 9, int)
 #define	WDIOC_GETTIMELEFT	_IOR(WATCHDOG_IOCTL_BASE, 10, int)
+#define	WDIOC_NOCLOSEPING	_IOR(WATCHDOG_IOCTL_BASE, 11, int)
 
 #define	WDIOF_UNKNOWN		-1	/* Unknown flag error */
 #define	WDIOS_UNKNOWN		-1	/* Unknown status error */
@@ -140,6 +141,7 @@ struct watchdog_device {
 #define WDOG_ALLOW_RELEASE	2	/* Did we receive the magic char ? */
 #define WDOG_NO_WAY_OUT		3	/* Is 'nowayout' feature set ? */
 #define WDOG_UNREGISTERED	4	/* Has the device been unregistered */
+#define WDOG_NO_CLOSE_PING	5	/* Do not ping in watchdog_release() */
 };
 
 #ifdef CONFIG_WATCHDOG_NOWAYOUT
-- 
1.7.10.1.362.g242cab3


             reply	other threads:[~2012-08-07 18:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-07 18:27 David Teigland [this message]
2012-08-07 18:57 ` [PATCH v2] watchdog: new option to skip ping in close Hans de Goede

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=20120807182730.GE29229@redhat.com \
    --to=teigland@redhat.com \
    --cc=linux-watchdog@vger.kernel.org \
    /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).