--- Linux-NBD/NBD.xs 2010/09/21 11:51:55 1.7 +++ Linux-NBD/NBD.xs 2017/05/30 01:07:29 1.8 @@ -12,7 +12,7 @@ typedef uint32_t u32; typedef uint64_t u64; -#include +#include "nbd.h" #if __BYTE_ORDER == __BIG_ENDIAN #define ntohll(netlong) (netlong) @@ -57,33 +57,22 @@ void _clear_sock (int dev) + ALIAS: + _clear_sock = NBD_CLEAR_SOCK + _clear_que = NBD_CLEAR_QUE + CODE: + ioctl (dev, ix); + +void +_set_blksize (int dev, unsigned long arg) + ALIAS: + _set_blksize = NBD_SET_BLKSIZE + _set_size = NBD_SET_SIZE + _set_size_blocks = NBD_SET_SIZE_BLOCKS + _set_timeout = NBD_SET_TIMEOUT + _set_flags = NBD_SET_FLAGS CODE: - ioctl (dev, NBD_CLEAR_SOCK); - -void -_clear_que (int dev) - CODE: - ioctl (dev, NBD_CLEAR_QUE); - -void -_set_blksize (int dev, unsigned long blocksize) - CODE: - ioctl (dev, NBD_SET_BLKSIZE, blocksize); - -void -_set_size (int dev, unsigned long size) - CODE: - ioctl (dev, NBD_SET_SIZE, size); - -void -_set_size_blocks (int dev, unsigned long nblocks) - CODE: - ioctl (dev, NBD_SET_SIZE_BLOCKS, nblocks); - -void -_set_timeout (int dev, unsigned long timeout) - CODE: - ioctl (dev, NBD_SET_TIMEOUT, timeout); + ioctl (dev, ix, arg); void _print_debug (int dev) @@ -165,6 +154,9 @@ /* fallthrough */ case NBD_CMD_READ: + case NBD_CMD_FLUSH: + case NBD_CMD_TRIM: + case NBD_CMD_WRITE_ZEROES: s->req_read = 0; PUSHMARK (SP); @@ -184,7 +176,11 @@ else { PUSHs (sv_2mortal (newSVuv (len))); - method = "req_read"; + method = s->req.type == NBD_CMD_READ ? "req_read" + : s->req.type == NBD_CMD_FLUSH ? "req_flush" + : s->req.type == NBD_CMD_TRIM ? "req_trim" + : s->req.type == NBD_CMD_WRITE_ZEROES ? "req_write_zeroes" + : (abort (), ""); } break; @@ -229,7 +225,7 @@ if (data && !error) sv_catsv (RETVAL, data); -} +} OUTPUT: RETVAL