1 # Copyright 2018 syzkaller project authors. All rights reserved. 2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 include <uapi/linux/fs.h> 5 include <uapi/linux/blktrace_api.h> 6 include <uapi/linux/blkzoned.h> 7 include <uapi/linux/pr.h> 8 include <uapi/linux/hdreg.h> 9 include <uapi/linux/blkpg.h> 10 11 resource fd_block_trace[fd] 12 resource fd_block[fd_block_trace] 13 14 openat$nullb(fd const[AT_FDCWD], file ptr[in, string["/dev/nullb0"]], flags flags[open_flags], mode const[0]) fd_block 15 openat$md(fd const[AT_FDCWD], file ptr[in, string["/dev/md0"]], flags flags[open_flags], mode const[0]) fd_block 16 17 ioctl$BLKTRACESETUP(fd fd_block_trace, cmd const[BLKTRACESETUP], arg ptr[in, blk_user_trace_setup]) 18 ioctl$BLKTRACESTART(fd fd_block_trace, cmd const[BLKTRACESTART], arg const[0]) 19 ioctl$BLKTRACESTOP(fd fd_block_trace, cmd const[BLKTRACESTOP], arg const[0]) 20 ioctl$BLKTRACETEARDOWN(fd fd_block_trace, cmd const[BLKTRACETEARDOWN], arg const[0]) 21 22 ioctl$BLKFLSBUF(fd fd_block, cmd const[BLKFLSBUF], arg ptr[in, intptr]) 23 ioctl$BLKROSET(fd fd_block, cmd const[BLKROSET], arg ptr[in, intptr]) 24 ioctl$BLKDISCARD(fd fd_block, cmd const[BLKDISCARD], arg ptr[in, intptr]) 25 ioctl$BLKSECDISCARD(fd fd_block, cmd const[BLKSECDISCARD], arg ptr[in, intptr]) 26 ioctl$BLKZEROOUT(fd fd_block, cmd const[BLKZEROOUT], arg ptr[in, blk_zone_range]) 27 ioctl$BLKREPORTZONE(fd fd_block, cmd const[BLKREPORTZONE], arg ptr[in, blk_zone_report]) 28 ioctl$BLKRESETZONE(fd fd_block, cmd const[BLKRESETZONE], arg ptr[in, blk_zone_range]) 29 ioctl$BLKRAGET(fd fd_block, cmd const[BLKRAGET], arg ptr[out, intptr]) 30 ioctl$BLKROGET(fd fd_block, cmd const[BLKROGET], arg ptr[out, intptr]) 31 ioctl$BLKBSZGET(fd fd_block, cmd const[BLKBSZGET], arg ptr[out, intptr]) 32 ioctl$BLKPBSZGET(fd fd_block, cmd const[BLKPBSZGET], arg ptr[out, intptr]) 33 ioctl$BLKIOMIN(fd fd_block, cmd const[BLKIOMIN], arg ptr[out, intptr]) 34 ioctl$BLKIOOPT(fd fd_block, cmd const[BLKIOOPT], arg ptr[out, intptr]) 35 ioctl$BLKALIGNOFF(fd fd_block, cmd const[BLKALIGNOFF], arg ptr[out, intptr]) 36 ioctl$BLKSECTGET(fd fd_block, cmd const[BLKSECTGET], arg ptr[out, intptr]) 37 ioctl$BLKROTATIONAL(fd fd_block, cmd const[BLKROTATIONAL], arg ptr[out, intptr]) 38 ioctl$BLKFRASET(fd fd_block, cmd const[BLKFRASET], arg ptr[in, intptr]) 39 ioctl$BLKBSZSET(fd fd_block, cmd const[BLKBSZSET], arg ptr[in, intptr]) 40 ioctl$BLKPG(fd fd_block, cmd const[BLKPG], arg ptr[in, blkpg_ioctl_arg]) 41 ioctl$BLKRRPART(fd fd_block, cmd const[BLKRRPART], arg const[0]) 42 ioctl$BLKGETSIZE(fd fd_block, cmd const[BLKGETSIZE], arg ptr[out, intptr]) 43 ioctl$BLKGETSIZE64(fd fd_block, cmd const[BLKGETSIZE64], arg ptr[out, int64]) 44 45 ioctl$HDIO_GETGEO(fd fd_block, cmd const[HDIO_GETGEO], arg ptr[out, hd_geometry]) 46 47 ioctl$IOC_PR_REGISTER(fd fd_block, cmd const[IOC_PR_REGISTER], arg ptr[in, pr_registration]) 48 ioctl$IOC_PR_RESERVE(fd fd_block, cmd const[IOC_PR_RESERVE], arg ptr[in, pr_reservation]) 49 ioctl$IOC_PR_RELEASE(fd fd_block, cmd const[IOC_PR_RELEASE], arg ptr[in, pr_reservation]) 50 ioctl$IOC_PR_PREEMPT(fd fd_block, cmd const[IOC_PR_PREEMPT], arg ptr[in, pr_preempt]) 51 ioctl$IOC_PR_PREEMPT_ABORT(fd fd_block, cmd const[IOC_PR_PREEMPT_ABORT], arg ptr[in, pr_preempt]) 52 ioctl$IOC_PR_CLEAR(fd fd_block, cmd const[IOC_PR_CLEAR], arg ptr[in, pr_clear]) 53 54 blk_zone_report { 55 sector int64 56 nr_zones len[zones, int32] 57 reserved const[0, int32] 58 zones array[blk_zone] 59 } [packed] 60 61 blk_zone { 62 start int64 63 len int64 64 wp int64 65 type int8 66 cond int8 67 non_seq int8 68 reset int8 69 reserved array[const[0, int8], 36] 70 } 71 72 blk_zone_range { 73 sector int64 74 nr_sectors int64 75 } 76 77 hd_geometry { 78 heads int8 79 sectors int8 80 cylinders int16 81 start intptr 82 } 83 84 blkpg_ioctl_arg { 85 op int32 86 flags int32 87 datalen bytesize[data, int32] 88 data ptr[in, array[int8]] 89 } 90 91 blk_user_trace_setup { 92 name array[const[0, int8], BLKTRACE_BDEV_SIZE] 93 act_mask int16 94 buf_size int32 95 buf_nr int32 96 start_lba int64 97 end_lba int64 98 pid pid 99 } 100 101 pr_registration { 102 old_key int64 103 new_key int64 104 flags bool32 105 pad const[0, int32] 106 } 107 108 pr_reservation { 109 key int64 110 type int32 111 flags bool32 112 } 113 114 pr_preempt { 115 old_key int64 116 new_key int64 117 type int32 118 flags int32 119 } 120 121 pr_clear { 122 key int64 123 flags const[0, int32] 124 pad const[0, int32] 125 } 126