All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thanos Makatos <thanos.makatos@citrix.com>
To: xen-devel@lists.xen.org
Cc: thanos.makatos@citrix.com
Subject: [PATCH 19 of 21] blktap3/drivers: Introduce tapdisk's main function
Date: Fri, 19 Apr 2013 16:40:30 +0100	[thread overview]
Message-ID: <1bfbfcdb123cb1cfc0c8.1366386030@makatos-desktop> (raw)
In-Reply-To: <patchbomb.1366386011@makatos-desktop>

This patch copies from blktap2.5 tapdisk's main function.

Signed-off-by: Thanos Makatos <thanos.makatos@citrix.com>

diff --git a/tools/blktap3/drivers/tapdisk.c b/tools/blktap3/drivers/tapdisk.c
new file mode 100644
--- /dev/null
+++ b/tools/blktap3/drivers/tapdisk.c
@@ -0,0 +1,140 @@
+ /*
+  * Copyright (c) 2008, XenSource Inc.
+  * All rights reserved.
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions are met:
+  *     * Redistributions of source code must retain the above copyright
+  *       notice, this list of conditions and the following disclaimer.
+  *     * Redistributions in binary form must reproduce the above copyright
+  *       notice, this list of conditions and the following disclaimer in the
+  *       documentation and/or other materials provided with the distribution.
+  *     * Neither the name of XenSource Inc. nor the names of its contributors
+  *       may be used to endorse or promote products derived from this software
+  *       without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "tapdisk.h"
+#include "tapdisk-utils.h"
+#include "tapdisk-server.h"
+#include "tapdisk-control.h"
+
+static void usage(const char *app, int err)
+{
+    fprintf(stderr, "usage: %s <-u uuid> <-c control socket>\n", app);
+    exit(err);
+}
+
+static FILE
+*fdup(FILE * stream __attribute__((unused)), const char *mode)
+{
+    int fd, err;
+    FILE *f;
+
+    fd = dup(STDOUT_FILENO);
+    if (fd < 0)
+        goto fail;
+
+    f = fdopen(fd, mode);
+    if (!f)
+        goto fail;
+
+    return f;
+
+  fail:
+    err = -errno;
+    if (fd >= 0)
+        close(fd);
+    errno = -err;
+
+    return NULL;
+}
+
+int main(int argc, char *argv[])
+{
+    char *control;
+    int c, err, nodaemon;
+    FILE *out;
+
+    control = NULL;
+    nodaemon = 0;
+
+    while ((c = getopt(argc, argv, "Dh")) != -1) {
+        switch (c) {
+        case 'D':
+            nodaemon = 1;
+            break;
+        case 'h':
+            usage(argv[0], 0);
+            break;
+        default:
+            usage(argv[0], EINVAL);
+        }
+    }
+
+    if (optind != argc)
+        usage(argv[0], EINVAL);
+
+    err = tapdisk_server_init();
+    if (err) {
+        DPRINTF("failed to initialize server: %d\n", err);
+        goto out;
+    }
+
+    out = fdup(stdout, "w");
+    if (!out) {
+        err = -errno;
+        DPRINTF("failed to dup stdout: %d\n", err);
+        goto out;
+    }
+
+    if (!nodaemon) {
+        err = daemon(0, 0);
+        if (err) {
+            DPRINTF("failed to daemonize: %d\n", errno);
+            goto out;
+        }
+    }
+
+    tapdisk_start_logging("tapdisk", NULL);
+
+    err = tapdisk_control_open(&control);
+    if (err) {
+        DPRINTF("failed to open control socket: %d\n", err);
+        goto out;
+    }
+
+    err = tapdisk_server_complete();
+    if (err) {
+        DPRINTF("failed to complete server: %d\n", err);
+        goto out;
+    }
+
+    fprintf(out, "%s\n", control);
+    fclose(out);
+
+    err = tapdisk_server_run();
+
+  out:
+    tapdisk_control_close();
+    tapdisk_stop_logging();
+    return -err;
+}

  parent reply	other threads:[~2013-04-19 15:40 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-19 15:40 [PATCH 00 of 21] blktap3/drivers: Introduce tapdisk server Thanos Makatos
2013-04-19 15:40 ` [PATCH 01 of 21] blktap3/drivers: driver for RAW images Thanos Makatos
2013-04-19 15:40 ` [PATCH 02 of 21] blktap3/drivers: Introduce I/O optimisation routines Thanos Makatos
2013-04-19 15:40 ` [PATCH 03 of 21] blktap3/drivers: Introduce libaio compatibility Thanos Makatos
2013-04-19 15:40 ` [PATCH 04 of 21] blktap3/drivers: Introduce locking functionality Thanos Makatos
2013-04-19 15:40 ` [PATCH 05 of 21] blktap3/drivers: Introduce logging for the tapdisk Thanos Makatos
2013-04-19 15:40 ` [PATCH 06 of 21] blktap3/drivers: Introduce tapdisk profiling Thanos Makatos
2013-04-19 15:40 ` [PATCH 07 of 21] blktap3/drivers: Introduce scheduling of events inside tapdisks Thanos Makatos
2013-04-19 15:40 ` [PATCH 08 of 21] blktap3/drivers: Introduce handling of control commands Thanos Makatos
2013-04-19 15:40 ` [PATCH 09 of 21] blktap3/drivers: Introduce back-end driver types Thanos Makatos
2013-04-19 15:40 ` [PATCH 10 of 21] blktap3/drivers: Introduce back-end driver abstraction Thanos Makatos
2013-04-19 15:40 ` [PATCH 11 of 21] blktap3/drivers: Introduce I/O request filtering functionality Thanos Makatos
2013-04-19 15:40 ` [PATCH 12 of 21] blktap3/drivers: Introduce back-end image abstraction layer Thanos Makatos
2013-04-19 15:40 ` [PATCH 13 of 21] blktap3/drivers: Introduce queuing and queue management for I/O requests Thanos Makatos
2013-04-19 15:40 ` [PATCH 14 of 21] blktap3/drivers: Introduce core tapdisk server Thanos Makatos
2013-04-19 15:40 ` [PATCH 15 of 21] blktap3/drivers: Introduce stats reporting Thanos Makatos
2013-04-19 15:40 ` [PATCH 16 of 21] blktap3/drivers: Introduces back-end storage type discovery Thanos Makatos
2013-04-19 15:40 ` [PATCH 17 of 21] blktap3/drivers: Introduce representation and management of Virtual Block Devices in tapdisk Thanos Makatos
2013-04-19 15:40 ` [PATCH 18 of 21] blktap3/drivers: Introduce tapdisk utility functions Thanos Makatos
2013-04-19 15:40 ` Thanos Makatos [this message]
2013-04-19 15:40 ` [PATCH 20 of 21] blktap3/drivers: Introduce tapdisk makefile Thanos Makatos
2013-04-19 15:40 ` [PATCH 21 of 21] blktap3: Introduce top-level blktap3 makefile Thanos Makatos

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=1bfbfcdb123cb1cfc0c8.1366386030@makatos-desktop \
    --to=thanos.makatos@citrix.com \
    --cc=xen-devel@lists.xen.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 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.