#include <getopt.h>
#include "tap-ctl.h"
-#include "blktaplib.h"
int
tap_ctl_open(const int id, const int minor, const char *params, int flags,
CFLAGS += -Werror -g
CFLAGS += -Wno-unused
CFLAGS += -fno-strict-aliasing
-CFLAGS += -I../include
+CFLAGS += -I../include -I$(KBUILD)/include
CFLAGS += -D_GNU_SOURCE
CFLAGS += -DUSE_NFS_LOCKS
CFLAGS += -DTAPDISK
#define BUG() td_panic()
#define BUG_ON(_cond) if (_cond) { td_panic(); }
-#define LOCAL_CACHE_REQUESTS (BLK_RING_SIZE*2)
+#define LOCAL_CACHE_REQUESTS (MAX_REQUESTS*2)
typedef struct local_cache local_cache_t;
do { \
DBG(TLOG_DBG, "%s: QUEUED: %" PRIu64 ", COMPLETED: %" \
PRIu64", RETURNED: %" PRIu64 ", DATA_ALLOCATED: " \
- "%lu, BBLK: 0x%04x\n", \
+ "%u, BBLK: 0x%04x\n", \
s->vhd.file, s->queued, s->completed, s->returned, \
VHD_REQS_DATA - s->vreq_free_count, \
s->bat.pbw_blk); \
DBG(TLOG_WARN, "READS: 0x%08"PRIx64", AVG_READ_SIZE: %f\n",
s->reads, (s->reads ? ((float)s->read_size / s->reads) : 0.0));
- DBG(TLOG_WARN, "ALLOCATED REQUESTS: (%lu total)\n", VHD_REQS_DATA);
+ DBG(TLOG_WARN, "ALLOCATED REQUESTS: (%u total)\n", VHD_REQS_DATA);
for (i = 0; i < VHD_REQS_DATA; i++) {
struct vhd_request *r = &s->vreq_list[i];
td_request_t *t = &r->treq;
#include <inttypes.h>
-/* for wmb et al */
-#include <xenctrl.h>
-#include <xen/io/ring.h>
-
#define LOGCMD_SHMP "shmp"
#define LOGCMD_PEEK "peek"
#define LOGCMD_CLEAR "clrw"
#include <sys/mman.h>
#include "list.h"
-#include "tapdisk.h"
-#include "blktap2.h"
-#include "blktaplib.h"
+#include "blktap.h"
#include "tapdisk-vbd.h"
+#include "tapdisk.h"
#include "tapdisk-utils.h"
#include "tapdisk-server.h"
#include "tapdisk-message.h"
#define _TAPDISK_IMAGE_H_
#include "tapdisk.h"
-#include <xen/io/blkif.h>
+#include "blktap.h"
struct td_image_handle {
int type;
#include <sys/stat.h>
#include <sys/types.h>
-#include "blktaplib.h"
#include "tapdisk-log.h"
#include "tapdisk-utils.h"
#include "tapdisk-logfile.h"
void tlog_vsyslog(int, const char *, va_list);
void tlog_syslog(int, const char *, ...);
+#include <syslog.h>
+
+#define EPRINTF(_f, _a...) syslog(LOG_ERR, "tap-err:%s: " _f, __func__, ##_a)
+#define DPRINTF(_f, _a...) syslog(LOG_INFO, _f, ##_a)
+#define PERROR(_f, _a...) EPRINTF(_f ": %s", ##_a, strerror(errno))
+
void __tlog_write(int, const char *, ...)
__attribute__((format(printf, 2, 3)));
#include "tapdisk-vbd.h"
#include "tapdisk-server.h"
#include "tapdisk-disktype.h"
+#include "blktap.h"
#define POLL_READ 0
#define POLL_WRITE 1
#include <sys/socket.h>
#include <sys/un.h>
-#include <blktaplib.h>
#include "tapdisk-server.h"
#include "tapdisk-syslog.h"
#include "tapdisk-utils.h"
#include <syslog.h>
#include "tapdisk.h"
-#include "blktaplib.h"
#include "tapdisk-log.h"
#include "tapdisk-utils.h"
#include "tapdisk-syslog.h"
#define _TAPDISK_UTILS_H_
#include <inttypes.h>
+#include <sys/time.h>
#define MAX_NAME_LEN 1000
#define TD_SYSLOG_IDENT_MAX 32
#include <sys/mman.h>
#include <sys/ioctl.h>
+#include "blktap.h"
#include "libvhd.h"
#include "tapdisk-image.h"
#include "tapdisk-driver.h"
#include "tapdisk-stats.h"
#include "tapdisk-storage.h"
-#include "blktap2.h"
-
#define DBG(_level, _f, _a...) tlog_write(_level, _f, ##_a)
#define ERR(_err, _f, _a...) tlog_error(_err, _f, ##_a)
ring->vstart =
(unsigned long)ring->mem + (BLKTAP_RING_PAGES * psize);
- ioctl(ring->fd, BLKTAP_IOCTL_SETMODE, BLKTAP_MODE_INTERPOSE);
-
return 0;
fail:
#define _TAPDISK_VBD_H_
#include <sys/time.h>
-#include <xenctrl.h>
-#include <xen/io/blkif.h>
#include "tapdisk.h"
+#include "blktap.h"
#include "scheduler.h"
#include "tapdisk-image.h"
void tapdisk_vbd_forward_request(td_request_t);
+typedef struct image {
+ unsigned long long size;
+ unsigned long secsize;
+ unsigned int info;
+} image_t;
+
int tapdisk_vbd_get_image_info(td_vbd_t *, image_t *);
int tapdisk_vbd_retry_needed(td_vbd_t *);
int tapdisk_vbd_quiesce_queue(td_vbd_t *);
#include <stdint.h>
#include "list.h"
-#include "blktaplib.h"
#include "tapdisk-log.h"
#include "tapdisk-utils.h"
#include "tapdisk-stats.h"
#define MAX_SEGMENTS_PER_REQ 11
+#define MAX_REQUESTS 32U
#define SECTOR_SHIFT 9
#define DEFAULT_SECTOR_SIZE 512
--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef _TD_BLKTAP_H_
+#define _TD_BLKTAP_H_
+
+#include <stdint.h>
+#include <stddef.h>
+#include <linux/blktap.h>
+
+#define BLKTAP_PAGE_SIZE sysconf(_SC_PAGE_SIZE)
+#define wmb()
+
+#define BLKTAP2_SYSFS_DIR "/sys/class/blktap2"
+#define BLKTAP2_CONTROL_NAME "blktap-control"
+#define BLKTAP2_CONTROL_DIR "/var/run/"BLKTAP2_CONTROL_NAME
+#define BLKTAP2_CONTROL_SOCKET "ctl"
+#define BLKTAP2_DIRECTORY "/dev/xen/blktap-2"
+#define BLKTAP2_CONTROL_DEVICE BLKTAP2_DIRECTORY"/control"
+#define BLKTAP2_RING_DEVICE BLKTAP2_DIRECTORY"/blktap"
+#define BLKTAP2_IO_DEVICE BLKTAP2_DIRECTORY"/tapdev"
+#define BLKTAP2_ENOSPC_SIGNAL_FILE "/var/run/tapdisk-enospc"
+
+/*
+ * compat crap to reduce patch size for now.
+ */
+
+typedef blktap_sring_t blkif_sring_t;
+typedef blktap_back_ring_t blkif_back_ring_t;
+typedef blktap_ring_req_t blkif_request_t;
+typedef blktap_ring_rsp_t blkif_response_t;
+#define blktap2_params blktap_device_info
+
+#define blkif_request_segment blktap_segment
+#define blktap_params blktap_device_info
+
+#define BLKIF_OP_WRITE BLKTAP_OP_WRITE
+#define BLKIF_OP_READ BLKTAP_OP_READ
+
+#define BLKIF_RSP_ERROR BLKTAP_RSP_ERROR
+#define BLKIF_RSP_OKAY BLKTAP_RSP_OKAY
+
+#define BLKIF_MAX_SEGMENTS_PER_REQUEST BLKTAP_SEGMENT_MAX
+#define rmb()
+
+#define BLKTAP_MMAP_PAGES (BLKTAP_RING_SIZE * BLKTAP_SEGMENT_MAX)
+#define BLKTAP_RING_PAGES 1
+#define BLKTAP_MMAP_REGION_SIZE (BLKTAP_RING_PAGES + BLKTAP_MMAP_PAGES)
+#define MMAP_VADDR(_vstart,_req,_seg) \
+ ((_vstart) + \
+ ((_req) * BLKTAP_SEGMENT_MAX * BLKTAP_PAGE_SIZE) + \
+ ((_seg) * BLKTAP_PAGE_SIZE))
+
+#define BLKTAP_IOCTL_KICK_FE BLKTAP_IOCTL_RESPOND
+#define BLKTAP2_IOCTL_ALLOC_TAP BLKTAP_IOCTL_ALLOC_TAP
+#define BLKTAP2_IOCTL_FREE_TAP BLKTAP_IOCTL_FREE_TAP
+#define BLKTAP2_IOCTL_CREATE_DEVICE BLKTAP_IOCTL_CREATE_DEVICE
+#define BLKTAP2_IOCTL_REMOVE_DEVICE BLKTAP_IOCTL_REMOVE_DEVICE
+
+#define BLKTAP2_IOCTL_SET_PARAMS 203
+#define BLKTAP2_IOCTL_PAUSE 204
+#define BLKTAP2_IOCTL_REOPEN 205
+#define BLKTAP2_IOCTL_RESUME 206
+
+#define BLKTAP2_MAX_MESSAGE_LEN BLKTAP_NAME_MAX
+
+#define BLKTAP2_RING_MESSAGE_PAUSE 1
+#define BLKTAP2_RING_MESSAGE_RESUME 2
+#define BLKTAP2_RING_MESSAGE_CLOSE BLKTAP_RING_MESSAGE_CLOSE
+
+#endif /* _TD_BLKTAP_H_ */
IMPORT_BRANDING := yes
include $(B_BASE)/common.mk
include $(B_BASE)/rpmbuild.mk
+include $(PROJECT_OUTPUTDIR)/kernel-dom0/kernel.inc
REPO_NAME= blktap
REPO=$(call hg_loc,blktap)
-rm changelog.tmp
$(RPM_BUILD_COOKIE): $(RPM_DIRECTORIES) $(SOURCES)
- $(RPMBUILD) --target $(DOMAIN0_ARCH_OPTIMIZED) -ba $(RPM_SPECSDIR)/blktap.spec
+ $(RPMBUILD) --target $(DOMAIN0_ARCH_OPTIMIZED) \
+ -ba $(RPM_SPECSDIR)/blktap.spec \
+ --define "kernel_version $(KERNEL_VERSION)"
@touch $@
$(MY_SOURCES)/MANIFEST: $(MY_SOURCES_DIRSTAMP)
+%define uname %{kernel_version}%{?flavour}
+
Summary: blktap user space utilities
Name: blktap
Version: @BLKTAP_VERSION@
Patch1: %{name}-udev-ignore-tapdevs.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Obsoletes: xen-blktap
-BuildRequires: e2fsprogs-devel, xen-devel
+BuildRequires: e2fsprogs-devel, kernel-xen-devel
%description
This package contains the blktap userspace utilities
%patch1 -p1
%build
-%{__make} USE_SYSTEM_LIBRARIES=y
+%{__make} USE_SYSTEM_LIBRARIES=y KBUILD=/lib/modules/%{uname}/build
%install
rm -rf $RPM_BUILD_ROOT