#include "blktaplib.h"
#include "blktapctrl.h"
#include "tapdisk.h"
+#include "list.h"
+#include "xs_api.h" /* for xs_fire_next_watch() */
#define PIDFILE "/var/run/blktapctrl.pid"
return ret;
}
-int blktapctrl_new_blkif(blkif_t *blkif)
+static int blktapctrl_new_blkif(blkif_t *blkif)
{
blkif_info_t *blk;
int major, minor, fd_read, fd_write, type, new;
return -EINVAL;
}
-int map_new_blktapctrl(blkif_t *blkif)
+static int map_new_blktapctrl(blkif_t *blkif)
{
DPRINTF("Received a poll for a new devmap\n");
if (write_msg(blkif->fds[WRITE], CTLMSG_NEWDEV, blkif, NULL) <= 0) {
return blkif->minor - 1;
}
-int unmap_blktapctrl(blkif_t *blkif)
+static int unmap_blktapctrl(blkif_t *blkif)
{
DPRINTF("Unmapping vbd\n");
}
/* Open the disk file and initialize aio state. */
-int tdaio_open (struct disk_driver *dd, const char *name, td_flag_t flags)
+static int tdaio_open (struct disk_driver *dd, const char *name, td_flag_t flags)
{
int i, fd, ret = 0, o_flags;
struct td_state *s = dd->td_state;
return ret;
}
-int tdaio_queue_read(struct disk_driver *dd, uint64_t sector,
+static int tdaio_queue_read(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
cb, id, sector, private);
}
-int tdaio_queue_write(struct disk_driver *dd, uint64_t sector,
+static int tdaio_queue_write(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
cb, id, sector, private);
}
-int tdaio_submit(struct disk_driver *dd)
+static int tdaio_submit(struct disk_driver *dd)
{
struct tdaio_state *prv = (struct tdaio_state *)dd->private;
return tap_aio_submit(&prv->aio);
}
-int tdaio_close(struct disk_driver *dd)
+static int tdaio_close(struct disk_driver *dd)
{
struct tdaio_state *prv = (struct tdaio_state *)dd->private;
return 0;
}
-int tdaio_do_callbacks(struct disk_driver *dd, int sid)
+static int tdaio_do_callbacks(struct disk_driver *dd, int sid)
{
int i, nr_events, rsp = 0;
struct io_event *ep;
return rsp;
}
-int tdaio_get_parent_id(struct disk_driver *dd, struct disk_id *id)
+static int tdaio_get_parent_id(struct disk_driver *dd, struct disk_id *id)
{
return TD_NO_PARENT;
}
-int tdaio_validate_parent(struct disk_driver *dd,
+static int tdaio_validate_parent(struct disk_driver *dd,
struct disk_driver *parent, td_flag_t flags)
{
return -EINVAL;
}
/* Open the disk file and initialize qcow state. */
-int tdqcow_open (struct disk_driver *dd, const char *name, td_flag_t flags)
+static int tdqcow_open (struct disk_driver *dd, const char *name, td_flag_t flags)
{
int fd, len, i, shift, ret, size, l1_table_size, o_flags;
int max_aio_reqs;
return -1;
}
-int tdqcow_queue_read(struct disk_driver *dd, uint64_t sector,
+static int tdqcow_queue_read(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
return rsp;
}
-int tdqcow_queue_write(struct disk_driver *dd, uint64_t sector,
+static int tdqcow_queue_write(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
return 0;
}
-int tdqcow_submit(struct disk_driver *dd)
+static int tdqcow_submit(struct disk_driver *dd)
{
struct tdqcow_state *prv = (struct tdqcow_state *)dd->private;
return tap_aio_submit(&prv->aio);
}
-int tdqcow_close(struct disk_driver *dd)
+static int tdqcow_close(struct disk_driver *dd)
{
struct tdqcow_state *s = (struct tdqcow_state *)dd->private;
uint32_t cksum, out;
return 0;
}
-int tdqcow_do_callbacks(struct disk_driver *dd, int sid)
+static int tdqcow_do_callbacks(struct disk_driver *dd, int sid)
{
int ret, i, nr_events, rsp = 0,*ptr;
struct io_event *ep;
return 0;
}
-int qcow_make_empty(struct tdqcow_state *s)
+static int qcow_make_empty(struct tdqcow_state *s)
{
uint32_t l1_length = s->l1_size * sizeof(uint64_t);
return 0;
}
-int qcow_get_cluster_size(struct tdqcow_state *s)
+static int qcow_get_cluster_size(struct tdqcow_state *s)
{
return s->cluster_size;
}
/* XXX: put compressed sectors first, then all the cluster aligned
tables to avoid losing bytes in alignment */
-int qcow_compress_cluster(struct tdqcow_state *s, int64_t sector_num,
+static int qcow_compress_cluster(struct tdqcow_state *s, int64_t sector_num,
const uint8_t *buf)
{
z_stream strm;
return 0;
}
-int tdqcow_get_parent_id(struct disk_driver *dd, struct disk_id *id)
+static int tdqcow_get_parent_id(struct disk_driver *dd, struct disk_id *id)
{
off_t off;
char *buf, *filename;
return err;
}
-int tdqcow_validate_parent(struct disk_driver *child,
+static int tdqcow_validate_parent(struct disk_driver *child,
struct disk_driver *parent, td_flag_t flags)
{
struct stat stats;
}
/* Open the disk file and initialize ram state. */
-int tdram_open (struct disk_driver *dd, const char *name, td_flag_t flags)
+static int tdram_open (struct disk_driver *dd, const char *name, td_flag_t flags)
{
char *p;
uint64_t size;
return ret;
}
- int tdram_queue_read(struct disk_driver *dd, uint64_t sector,
+static int tdram_queue_read(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
return cb(dd, 0, sector, nb_sectors, id, private);
}
-int tdram_queue_write(struct disk_driver *dd, uint64_t sector,
+static int tdram_queue_write(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
return cb(dd, 0, sector, nb_sectors, id, private);
}
-int tdram_submit(struct disk_driver *dd)
+static int tdram_submit(struct disk_driver *dd)
{
return 0;
}
-int tdram_close(struct disk_driver *dd)
+static int tdram_close(struct disk_driver *dd)
{
struct tdram_state *prv = (struct tdram_state *)dd->private;
return 0;
}
-int tdram_do_callbacks(struct disk_driver *dd, int sid)
+static int tdram_do_callbacks(struct disk_driver *dd, int sid)
{
/* always ask for a kick */
return 1;
}
-int tdram_get_parent_id(struct disk_driver *dd, struct disk_id *id)
+static int tdram_get_parent_id(struct disk_driver *dd, struct disk_id *id)
{
return TD_NO_PARENT;
}
-int tdram_validate_parent(struct disk_driver *dd,
+static int tdram_validate_parent(struct disk_driver *dd,
struct disk_driver *parent, td_flag_t flags)
{
return -EINVAL;
}
/* Open the disk file and initialize aio state. */
-int tdsync_open (struct disk_driver *dd, const char *name, td_flag_t flags)
+static int tdsync_open (struct disk_driver *dd, const char *name, td_flag_t flags)
{
int i, fd, ret = 0, o_flags;
struct td_state *s = dd->td_state;
return ret;
}
- int tdsync_queue_read(struct disk_driver *dd, uint64_t sector,
+static int tdsync_queue_read(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
return cb(dd, (ret < 0) ? ret: 0, sector, nb_sectors, id, private);
}
- int tdsync_queue_write(struct disk_driver *dd, uint64_t sector,
+static int tdsync_queue_write(struct disk_driver *dd, uint64_t sector,
int nb_sectors, char *buf, td_callback_t cb,
int id, void *private)
{
return cb(dd, (ret < 0) ? ret : 0, sector, nb_sectors, id, private);
}
-int tdsync_submit(struct disk_driver *dd)
+static int tdsync_submit(struct disk_driver *dd)
{
return 0;
}
-int tdsync_close(struct disk_driver *dd)
+static int tdsync_close(struct disk_driver *dd)
{
struct tdsync_state *prv = (struct tdsync_state *)dd->private;
return 0;
}
-int tdsync_do_callbacks(struct disk_driver *dd, int sid)
+static int tdsync_do_callbacks(struct disk_driver *dd, int sid)
{
/* always ask for a kick */
return 1;
}
-int tdsync_get_parent_id(struct disk_driver *dd, struct disk_id *id)
+static int tdsync_get_parent_id(struct disk_driver *dd, struct disk_id *id)
{
return TD_NO_PARENT;
}
-int tdsync_validate_parent(struct disk_driver *dd,
+static int tdsync_validate_parent(struct disk_driver *dd,
struct disk_driver *parent, td_flag_t flags)
{
return -EINVAL;
static uint64_t prev = 0;
static char output[25];
-void print_bytes(void *ptr, int length) {
-
+static void print_bytes(void *ptr, int length)
+{
int i,k;
unsigned char *p = ptr;
return;
}
-void debug_output(uint64_t progress, uint64_t size)
+static void debug_output(uint64_t progress, uint64_t size)
{
uint64_t blocks = size/20;
#define MAX_NAME_LEN 1000
-void help(void)
+static void help(void)
{
fprintf(stderr, "Qcow-utils: v1.0.0\n");
fprintf(stderr,
static uint64_t prev = 0, written = 0;
static char output[25];
-void print_bytes(void *ptr, int length) {
-
+static void print_bytes(void *ptr, int length)
+{
int i,k;
unsigned char *p = ptr;
return;
}
-void debug_output(uint64_t progress, uint64_t size)
+static void debug_output(uint64_t progress, uint64_t size)
{
/*Output progress every 5% */
uint64_t blocks = size/20;
#define td_for_each_disk(tds, drv) \
for (drv = tds->disks; drv != NULL; drv = drv->next)
-void usage(void)
+static void usage(void)
{
fprintf(stderr, "blktap-utils: v1.0.0\n");
fprintf(stderr, "usage: tapdisk <READ fifo> <WRITE fifo>\n");
exit(-1);
}
-void daemonize(void)
+static void daemonize(void)
{
int i;
return;
}
-void sig_handler(int sig)
+static void sig_handler(int sig)
{
/*Received signal to close. If no disks are active, we close app.*/
}
}
-void io_done(struct disk_driver *dd, int sid)
+static void io_done(struct disk_driver *dd, int sid)
{
struct tap_disk *drv = dd->drv;
}
uint64_t sends, responds;
-int send_responses(struct disk_driver *dd, int res,
+static int send_responses(struct disk_driver *dd, int res,
uint64_t sector, int nr_secs, int idx, void *private)
{
pending_req_t *preq;
/* xenstore/xenbus: */
#define DOMNAME "Domain-0"
int setup_probe_watch(struct xs_handle *h);
-int xs_fire_next_watch(struct xs_handle *h);
/* Abitrary values, must match the underlying driver... */
*are created, we initalise the state and attach a disk.
*/
-int add_blockdevice_probe_watch(struct xs_handle *h, const char *domid)
+static int add_blockdevice_probe_watch(struct xs_handle *h, const char *domid)
{
char *path;
struct xenbus_watch *vbd_watch;
}
/* Asynch callback to check for /local/domain/<DOMID>/name */
-void check_dom(struct xs_handle *h, struct xenbus_watch *w,
+static void check_dom(struct xs_handle *h, struct xenbus_watch *w,
const char *bepath_im)
{
char *domid;
}
/* We must wait for xend to register /local/domain/<DOMID> */
-int watch_for_domid(struct xs_handle *h)
+static int watch_for_domid(struct xs_handle *h)
{
struct xenbus_watch *domid_watch;
char *path = NULL;