summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Gieschke2018-03-24 00:28:02 +0100
committerRafael Gieschke2018-03-24 00:28:02 +0100
commit5128361418de26a0fc7836c2545742dc0036af00 (patch)
tree1d4d4eee9003d99dbfc9b9e3d09573fc67393181
parentInclude `linux/signal.h` for `siginitsetinv`, `sigmask`, `sigprocmask` (diff)
downloaddnbd3-5128361418de26a0fc7836c2545742dc0036af00.tar.gz
dnbd3-5128361418de26a0fc7836c2545742dc0036af00.tar.xz
dnbd3-5128361418de26a0fc7836c2545742dc0036af00.zip
Follow https://lwn.net/Articles/735887/
-rw-r--r--src/kernel/net.c18
-rw-r--r--src/kernel/net.h2
2 files changed, 16 insertions, 4 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c
index c7c80b3..9a74114 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -290,8 +290,20 @@ int dnbd3_net_connect(dnbd3_device_t *dev)
// add heartbeat timer
dev->heartbeat_count = 0;
+
+// Adapted from https://elixir.bootlin.com/linux/v3.4/source/include/linux/timer.h#L98
+#define CONFIG_LOCKDEP
+#ifdef CONFIG_LOCKDEP
+#define init_timer(timer) \
+ do { \
+ static struct lock_class_key __key; \
+ init_timer_key((timer), NULL, 0, #timer, &__key); \
+ } while (0)
+#else
+#define init_timer(timer)\
+ init_timer_key((timer), NULL, 0, NULL, NULL)
+#endif
init_timer(&dev->hb_timer);
- dev->hb_timer.data = (unsigned long)dev;
dev->hb_timer.function = dnbd3_net_heartbeat;
dev->hb_timer.expires = jiffies + HZ;
add_timer(&dev->hb_timer);
@@ -359,12 +371,12 @@ int dnbd3_net_disconnect(dnbd3_device_t *dev)
return 0;
}
-void dnbd3_net_heartbeat(unsigned long arg)
+void dnbd3_net_heartbeat(struct timer_list *arg)
{
// Because different events need different intervals, the timer is called once a second.
// Other intervals can be derived using dev->heartbeat_count.
#define timeout_seconds(x) (dev->heartbeat_count % (x) == 0)
- dnbd3_device_t *dev = (dnbd3_device_t *)arg;
+ dnbd3_device_t *dev = (dnbd3_device_t *) container_of(arg, dnbd3_device_t, hb_timer);
if (!dev->panic)
{
diff --git a/src/kernel/net.h b/src/kernel/net.h
index 18aa227..dbaa857 100644
--- a/src/kernel/net.h
+++ b/src/kernel/net.h
@@ -39,7 +39,7 @@ int dnbd3_net_send(void *data);
int dnbd3_net_receive(void *data);
-void dnbd3_net_heartbeat(unsigned long arg);
+void dnbd3_net_heartbeat(struct timer_list *arg);
int dnbd3_net_discover(void *data);