diff options
author | Rafael Gieschke | 2018-03-24 00:28:02 +0100 |
---|---|---|
committer | Rafael Gieschke | 2018-03-24 00:28:02 +0100 |
commit | 5128361418de26a0fc7836c2545742dc0036af00 (patch) | |
tree | 1d4d4eee9003d99dbfc9b9e3d09573fc67393181 /src/kernel | |
parent | Include `linux/signal.h` for `siginitsetinv`, `sigmask`, `sigprocmask` (diff) | |
download | dnbd3-5128361418de26a0fc7836c2545742dc0036af00.tar.gz dnbd3-5128361418de26a0fc7836c2545742dc0036af00.tar.xz dnbd3-5128361418de26a0fc7836c2545742dc0036af00.zip |
Follow https://lwn.net/Articles/735887/
Diffstat (limited to 'src/kernel')
-rw-r--r-- | src/kernel/net.c | 18 | ||||
-rw-r--r-- | src/kernel/net.h | 2 |
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); |