summaryrefslogtreecommitdiffstats
path: root/src/kernel/net.c
diff options
context:
space:
mode:
authorFrederic Robra2019-07-09 12:12:55 +0200
committerFrederic Robra2019-07-09 12:12:55 +0200
commit04ba582cf57deacb07884b2d26ef60a591087dd3 (patch)
tree81c10e3fb3b04aeed85a3644998419cc37e52775 /src/kernel/net.c
parentadded first draft for keepalive and discovery (diff)
downloaddnbd3-ng-04ba582cf57deacb07884b2d26ef60a591087dd3.tar.gz
dnbd3-ng-04ba582cf57deacb07884b2d26ef60a591087dd3.tar.xz
dnbd3-ng-04ba582cf57deacb07884b2d26ef60a591087dd3.zip
added worker for keepalive and discovery
Diffstat (limited to 'src/kernel/net.c')
-rw-r--r--src/kernel/net.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c
index f44925f..921f0d3 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -31,8 +31,8 @@
#define dnbd3_req_op(req) req_op(req)
#define dnbd3_sock_create(af,type,proto,sock) sock_create_kern(&init_net, (af) == HOST_IP4 ? AF_INET : AF_INET6, type, proto, sock)
-#define KEEPALIVE_TIMER (TIMER_INTERVAL_KEEPALIVE_PACKET * (jiffies + HZ))
-#define DISCOVERY_TIMER (TIMER_INTERVAL_PROBE_NORMAL * (jiffies + HZ))
+#define KEEPALIVE_TIMER (jiffies + (HZ * TIMER_INTERVAL_KEEPALIVE_PACKET))
+#define DISCOVERY_TIMER (jiffies + (HZ * TIMER_INTERVAL_PROBE_NORMAL))
#define init_msghdr(h) do { \
h.msg_name = NULL; \
@@ -43,6 +43,7 @@
} while (0)
+
static void printHost(struct dnbd3_host_t *host, char *msg)
{
if (host->type == HOST_IP4) {
@@ -239,8 +240,8 @@ error:
void dnbd3_keepalive(struct timer_list *arg)
{
struct dnbd3_sock *sock = container_of(arg, struct dnbd3_sock, keepalive_timer);
- printk(KERN_DEBUG "dnbd3: schedule keepalive\n");
// schedule_work(&sock->keepalive);
+ queue_work(dnbd3_wq, &sock->keepalive);
sock->keepalive_timer.expires = KEEPALIVE_TIMER;
add_timer(&sock->keepalive_timer);
}
@@ -249,6 +250,7 @@ static void keepalive(struct work_struct *work)
{
struct dnbd3_sock *sock = container_of(work, struct dnbd3_sock, keepalive);
struct request *req;
+ printk(KERN_DEBUG "dnbd3: starting keepalive worker\n");
mutex_lock(&sock->lock);
req = kmalloc(sizeof(struct request), GFP_ATOMIC );
// send keepalive
@@ -266,8 +268,7 @@ static void keepalive(struct work_struct *work)
void dnbd3_discovery(struct timer_list *arg)
{
struct dnbd3_device *dev = container_of(arg, struct dnbd3_device, discovery_timer);
- printk(KERN_DEBUG "dnbd3: schedule discovery\n");
-// schedule_work(&dev->discovery);
+ queue_work(dnbd3_wq, &dev->discovery);
dev->discovery_timer.expires = DISCOVERY_TIMER;
add_timer(&dev->discovery_timer);
}
@@ -277,12 +278,13 @@ static void discovery(struct work_struct *work)
struct dnbd3_device *dev = container_of(work, struct dnbd3_device, discovery);
dnbd3_sock *sock = &dev->socks[0]; // we use the first sock for discovery
struct request *req;
+ printk(KERN_DEBUG "dnbd3: starting discovery worker\n");
mutex_lock(&sock->lock);
req = kmalloc(sizeof(struct request), GFP_ATOMIC );
// send keepalive
if (req) {
dnbd3_cmd_to_priv(req, CMD_GET_SERVERS);
- dnbd3_send_request(NULL, sock, req); // we do not need the device for keepalive
+ dnbd3_send_request(dev, sock, req); // we do not need the device for keepalive
kfree(req);
} else {
printk(KERN_WARNING "dnbd3: could not create get servers request\n");
@@ -468,7 +470,6 @@ static int dnbd3_socket_disconnect(dnbd3_device *dev, dnbd3_sock *sock)
// clear heartbeat timer
del_timer_sync(&sock->keepalive_timer);
-// destroy_workqueue(&sock->keepalive);
if (sock->sock) {
kernel_sock_shutdown(sock->sock, SHUT_RDWR);
@@ -490,7 +491,6 @@ int dnbd3_net_disconnect(struct dnbd3_device *dev)
int i;
int result;
del_timer_sync(&dev->discovery_timer);
-// destroy_workqueue(&dev->discovery);
for (i = 0; i < NUMBER_CONNECTIONS; i++) {
if (dev->socks[i].sock) {
if (dnbd3_socket_disconnect(dev, &dev->socks[i])) {