14ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin/* 24ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com> 337d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org> 44ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * All rights reserved. 54ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * 64ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * Redistribution and use in source and binary forms, with or without 74ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * modification, are permitted provided that the following conditions 84ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * are met: 94ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright 104ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * notice, this list of conditions and the following disclaimer. 114ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 124ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * notice, this list of conditions and the following disclaimer in the 134ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * documentation and/or other materials provided with the distribution. 144ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 154ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * derived from this software without specific prior written permission. 164ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * 174ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 184ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 194ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 204ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 214ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 224ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 234ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 244ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 254ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 264ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin */ 284ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 294ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#include "defs.h" 3037d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin 3137d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin#include DEF_MPERS_TYPE(struct_blk_user_trace_setup) 3237d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin#include DEF_MPERS_TYPE(struct_blkpg_ioctl_arg) 3337d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin#include DEF_MPERS_TYPE(struct_blkpg_partition) 3437d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin 35d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#include <linux/ioctl.h> 364ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#include <linux/fs.h> 374ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 38d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestypedef struct { 39d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int op; 40d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int flags; 41d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int datalen; 42d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes void *data; 43d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} struct_blkpg_ioctl_arg; 44d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 45d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#define BLKPG_DEVNAMELTH 64 46d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#define BLKPG_VOLNAMELTH 64 47d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughestypedef struct { 48d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int64_t start; /* starting offset in bytes */ 49d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int64_t length; /* length in bytes */ 50d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int pno; /* partition number */ 51d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char devname[BLKPG_DEVNAMELTH]; /* partition name, like sda5 or c0d1p2, 52d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes to be used in kernel messages */ 53d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char volname[BLKPG_VOLNAMELTH]; /* volume label */ 54d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} struct_blkpg_partition; 55d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 564ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#define BLKTRACE_BDEV_SIZE 32 5737d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levintypedef struct blk_user_trace_setup { 584ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin char name[BLKTRACE_BDEV_SIZE]; /* output */ 594ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin uint16_t act_mask; /* input */ 604ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin uint32_t buf_size; /* input */ 614ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin uint32_t buf_nr; /* input */ 624ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin uint64_t start_lba; 634ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin uint64_t end_lba; 644ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin uint32_t pid; 6537d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin} struct_blk_user_trace_setup; 6637d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin 6737d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin#include MPERS_DEFS 6837d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin 69d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#ifndef BLKPG 70dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKPG _IO(0x12, 105) 71d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#endif 72d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 7337d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin/* 7437d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin * ioctl numbers <= 114 are present in Linux 2.4. The following ones have been 7537d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin * added since then and headers containing them may not be available on every 7637d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin * system. 7737d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin */ 784ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 794ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKTRACESETUP 8037d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin# define BLKTRACESETUP _IOWR(0x12, 115, struct_blk_user_trace_setup) 814ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 824ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKTRACESTART 83dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKTRACESTART _IO(0x12, 116) 844ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 854cee0af77b0275740f7f97ae5d778f60d5ac7f88Dmitry V. Levin#ifndef BLKTRACESTOP 86dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKTRACESTOP _IO(0x12, 117) 874ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 884ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKTRACETEARDOWN 89dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKTRACETEARDOWN _IO(0x12, 118) 904ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 914ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKDISCARD 92dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKDISCARD _IO(0x12, 119) 934ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 944ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKIOMIN 95dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKIOMIN _IO(0x12, 120) 964ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 974ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKIOOPT 98dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKIOOPT _IO(0x12, 121) 994ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 1004ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKALIGNOFF 101dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKALIGNOFF _IO(0x12, 122) 1024ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 1034ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKPBSZGET 104dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKPBSZGET _IO(0x12, 123) 1054ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 1064ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKDISCARDZEROES 107dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKDISCARDZEROES _IO(0x12, 124) 1084ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 1094ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#ifndef BLKSECDISCARD 110dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKSECDISCARD _IO(0x12, 125) 111a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin#endif 112a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin#ifndef BLKROTATIONAL 113dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKROTATIONAL _IO(0x12, 126) 114a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin#endif 115a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin#ifndef BLKZEROOUT 116dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes# define BLKZEROOUT _IO(0x12, 127) 1174ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin#endif 1184ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 1190ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/blkpg_ops.h" 1204ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 1214ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levinstatic void 12237d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levinprint_blkpg_req(struct tcb *tcp, const struct_blkpg_ioctl_arg *blkpg) 1234ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin{ 12437d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin struct_blkpg_partition p; 1254ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 12660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{"); 127be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin printxval(blkpg_ops, blkpg->op, "BLKPG_???"); 1284ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 129a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprintf(", flags=%d, datalen=%d, data=", 130be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin blkpg->flags, blkpg->datalen); 1314ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 132d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes if (!umove_or_printaddr(tcp, ptr_to_kulong(blkpg->data), &p)) { 133d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprintf("{start=%" PRId64 ", length=%" PRId64 134d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ", pno=%d, devname=", 135d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes p.start, p.length, p.pno); 1360a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin print_quoted_string(p.devname, sizeof(p.devname), 1370a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin QUOTE_0_TERMINATED); 1380a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin tprints(", volname="); 1390a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin print_quoted_string(p.volname, sizeof(p.volname), 1400a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin QUOTE_0_TERMINATED); 141a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints("}"); 1420a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin } 143a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints("}"); 1444ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin} 1454ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 146d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott HughesMPERS_PRINTER_DECL(int, block_ioctl, struct tcb *const tcp, 147d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes const unsigned int code, const kernel_ulong_t arg) 1484ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin{ 1494ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin switch (code) { 150be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin /* take arg as a value, not as a pointer */ 1514ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKRASET: 1524ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKFRASET: 153d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprintf(", %" PRI_klu, arg); 1544ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 1554ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 156a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin /* return an unsigned short */ 1574ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKSECTGET: 158a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin case BLKROTATIONAL: 159a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (entering(tcp)) 160a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 0; 161a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 162a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin printnum_short(tcp, arg, "%hu"); 1634ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 1644ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 165be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin /* return a signed int */ 1664ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKROGET: 1674ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKBSZGET: 1684ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKSSZGET: 1694ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKALIGNOFF: 170a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (entering(tcp)) 171a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 0; 1720c9087c1b5bc237801b1e56e4d735a63e27ea50cDmitry V. Levin /* fall through */ 1730c9087c1b5bc237801b1e56e4d735a63e27ea50cDmitry V. Levin /* take a signed int */ 1740c9087c1b5bc237801b1e56e4d735a63e27ea50cDmitry V. Levin case BLKROSET: 1750c9087c1b5bc237801b1e56e4d735a63e27ea50cDmitry V. Levin case BLKBSZSET: 176a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 177a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin printnum_int(tcp, arg, "%d"); 1784ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 1794ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 180be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin /* return an unsigned int */ 1814ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKPBSZGET: 1824ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKIOMIN: 1834ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKIOOPT: 1844ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKDISCARDZEROES: 185a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (entering(tcp)) 186a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 0; 187a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 188a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin printnum_int(tcp, arg, "%u"); 1894ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 1904ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 191be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin /* return a signed long */ 1924ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKRAGET: 1934ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKFRAGET: 194a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (entering(tcp)) 195a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 0; 196a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 1972479ef0bceaa35ea353fd0ea372cf31d5eb8a216Dmitry V. Levin printnum_slong(tcp, arg); 1984ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 1994ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 200be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin /* returns an unsigned long */ 2014ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKGETSIZE: 202a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (entering(tcp)) 203a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 0; 204a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 2052479ef0bceaa35ea353fd0ea372cf31d5eb8a216Dmitry V. Levin printnum_ulong(tcp, arg); 2064ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 2074ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 20825caa318eedf38200cd7660320d95bf4662c6c5bDmitry V. Levin#ifdef HAVE_BLKGETSIZE64 209a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin /* returns an uint64_t */ 2104ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKGETSIZE64: 211a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (entering(tcp)) 212a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 0; 213a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 214a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin printnum_int64(tcp, arg, "%" PRIu64); 2154ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 2165bd67c86a93c658d258348e8f14af94fd45cbeb6Denys Vlasenko#endif 2174ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 218a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin /* takes a pair of uint64_t */ 2194ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKDISCARD: 2204ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKSECDISCARD: 221a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin case BLKZEROOUT: 222a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 22346d25c2b84bf834a8e6f7e00103a0304a8a7b1a2Dmitry V. Levin printpair_int64(tcp, arg, "%" PRIu64); 2244ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 2254ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 226a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin /* More complex types */ 227a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin case BLKPG: { 22837d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin struct_blkpg_ioctl_arg blkpg; 229a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin 230a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 231a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (!umove_or_printaddr(tcp, arg, &blkpg)) 232a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin print_blkpg_req(tcp, &blkpg); 2334ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 234a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin } 235be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin 2364ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKTRACESETUP: 2374ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin if (entering(tcp)) { 23837d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin struct_blk_user_trace_setup buts; 239a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin 240a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints(", "); 241a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin if (umove_or_printaddr(tcp, arg, &buts)) 242a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin break; 243a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprintf("{act_mask=%u, buf_size=%u, " 244a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin "buf_nr=%u, start_lba=%" PRIu64 ", " 245a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin "end_lba=%" PRIu64 ", pid=%u", 246a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin (unsigned)buts.act_mask, buts.buf_size, 247a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin buts.buf_nr, buts.start_lba, 248a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin buts.end_lba, buts.pid); 249a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return 1; 250a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin } else { 25137d1b3dd8c33983351f9d94ae60d6f55fc6e0be7Dmitry V. Levin struct_blk_user_trace_setup buts; 252a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin 2530bea528fa8ff7804f6aa3809e7e01d76034f38dfDmitry V. Levin if (!syserror(tcp) && !umove(tcp, arg, &buts)) { 2540bea528fa8ff7804f6aa3809e7e01d76034f38dfDmitry V. Levin tprints(", name="); 2550bea528fa8ff7804f6aa3809e7e01d76034f38dfDmitry V. Levin print_quoted_string(buts.name, sizeof(buts.name), 2560bea528fa8ff7804f6aa3809e7e01d76034f38dfDmitry V. Levin QUOTE_0_TERMINATED); 2570a870586405ef425760d7681d5ac092bb022365eDmitry V. Levin } 258a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin tprints("}"); 259a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin break; 2604ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin } 261be284cae112d71a0073e24b34e16a63f31b32fd8Dmitry V. Levin 262a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin /* No arguments */ 263a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin case BLKRRPART: 264a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin case BLKFLSBUF: 2654ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKTRACESTART: 2664ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKTRACESTOP: 2674ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin case BLKTRACETEARDOWN: 2684ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin break; 269a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin default: 270a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return RVAL_DECODED; 271a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin } 2724ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin 273a0beac15389aa69135ce8f968c7f4e20e455940dDmitry V. Levin return RVAL_DECODED | 1; 2744ef6db489a8a51ae03ffb78b58c679162a39f3c3Dmitry V. Levin} 275