	.file	"extr_zinject.c_usage.c"
	.intel_syntax noprefix
	.text
	.section	.rodata.str1.8,"aMS",@progbits,1
	.align 8
.LC0:
	.ascii	"usage:\n\n\tzinject\n\n\t\tList all active injection records"
	.ascii	".\n\n\tzinject -c <id|all>\n\n\t\tClear the particular recor"
	.ascii	"d (if given a numeric ID), or\n\t\tall records if 'all' is s"
	.ascii	"pecified.\n\n\tzinject -p <function name> pool\n\t\tInject a"
	.ascii	" panic fault at the specified function. Only \n\t\tfunctions"
	.ascii	" which call spa_vdev_config_exit(), or \n\t\tspa_vdev_exit()"
	.ascii	" will trigger a panic.\n\n\tzinject -d device [-e errno] [-L"
	.ascii	" <nvlist|uber|pad1|pad2>] [-F]\n\t\t[-T <read|write|free|cla"
	.ascii	"im|all>] [-f frequency] pool\n\n\t\tInject a fault into a pa"
	.ascii	"rticular device or the device's\n\t\tlabel.  Label injection"
	.ascii	" can either be 'nvlist', 'uber',\n \t\t'pad1', or 'pad2'.\n\t"
	.ascii	"\t'errno' can be 'nxio' (the default), 'io', 'dtl', or\n\t\t"
	.ascii	"'corrupt' (bit flip).\n\t\t'frequency' is a value between 0."
	.ascii	"0001 and 100.0 that limits\n\t\tdevice error injection to a "
	.ascii	"percentage of the IOs.\n\n\tzinject -d device -A <degrade|fa"
	.ascii	"ult> -D <delay secs> pool\n\t\tPerform a specific action on "
	.ascii	"a particular device.\n\n\tzinject -d device -D latency:lanes"
	.ascii	" pool\n\n\t\tAdd an artificial delay to IO requests on a par"
	.ascii	"ticular\n\t\tdevice, such that the requests take a minimum o"
	.ascii	"f 'latency'\n\t\tmilliseconds to complete. Each delay has an"
	.ascii	" associated\n\t\tnumber of 'lanes' which defines the number "
	.ascii	"of concurrent\n\t\tIO requests that can be processed.\n\n\t\t"
	.ascii	"For example, with a single lane delay of 10 ms (-D 10:1),\n\t"
	.ascii	"\tthe device will only be able to service a single IO reques"
	.ascii	"t\n\t\tat a time with each request taking 10 ms to complete."
	.ascii	" So,\n\t\tif only a single request is submitted every 10 ms,"
	.ascii	" the\n\t\taverage latency will be 10 ms; but if more than on"
	.ascii	"e request\n\t\tis submitted every 10 ms, the average latency"
	.ascii	" will be more\n\t\tthan 10 ms.\n\n\t\tSimilarly, if a delay "
	.ascii	"of 10 ms is specified to have two\n\t\tlanes (-D 10:2), then"
	.ascii	" the device will be able to service\n\t\ttwo requests at a t"
	.ascii	"ime, each with a minimum latency of\n\t\t10 ms. So, if two r"
	.ascii	"equests are submitted every 10 ms, then\n\t\tthe average lat"
	.ascii	"ency will be 10 ms; but if more than two\n\t\trequests are s"
	.ascii	"ubmitted every 10 ms, the average latency\n\t\twill be more "
	.ascii	"than 10 ms.\n\n\t\tAlso not"
	.ascii	"e, these delays are additive. So two invocations\n\t\tof '-D"
	.ascii	" 10:1', is roughly equivalent to a single invocation\n\t\tof"
	.ascii	" '-D 10:2'. This also means, one can specify multiple\n\t\tl"
	.ascii	"anes with differing target latencies. For example, an\n\t\ti"
	.ascii	"nvocation of '-D 10:1' followed by '-D 25:2' will\n\t\tcreat"
	.ascii	"e 3 lanes on the device; one lane with a latency\n\t\tof 10 "
	.ascii	"ms and two lanes with a 25 ms latency.\n\n\tzinject -I [-s <"
	.ascii	"seconds> | -g <txgs>] pool\n\t\tCause the pool to stop writi"
	.ascii	"ng blocks yet not\n\t\treport errors for a duration.  Simula"
	.ascii	"tes buggy hardware\n\t\tthat fails to honor cache flush requ"
	.ascii	"ests.\n\t\tDefault duration is 30 seconds.  The machine is p"
	.ascii	"anicked\n\t\tat the end of the duration.\n\n\tzinject -b obj"
	.ascii	"set:object:level:blkid pool\n\n\t\tInject an error into pool"
	.ascii	" 'pool' with the numeric bookmark\n\t\tspecified by the rema"
	.ascii	"ining tuple.  Each number is in\n\t\thexadecimal, and only o"
	.ascii	"ne block can be specified.\n\n\tzinject [-q] <-t type> [-C d"
	.ascii	"vas] [-e errno] [-l level]\n\t\t[-r range] [-a] [-m] [-u] [-"
	.ascii	"f freq] <object>\n\n\t\tInject an error into the object spec"
	.ascii	"ified by the '-t' option\n\t\tand the object descriptor.  Th"
	.ascii	"e 'object' parameter is\n\t\tinterpreted depending on the '-"
	.ascii	"t' option.\n\n\t\t-q\tQuiet mode.  Only print out the handle"
	.ascii	"r number added.\n\t\t-e\tInject a specific error.  Must be o"
	.ascii	"ne of 'io',\n\t\t\t'checksum', 'decompress', or 'decrypt'.  "
	.ascii	"Default is 'io'.\n\t\t-C\tInject the given error only into s"
	.ascii	"pecific DVAs. The\n\t\t\tDVAs should be specified as a list "
	.ascii	"of 0-indexed DVAs\n\t\t\tseparated by commas (ex. '0,2').\n\t"
	.ascii	"\t-l\tInject error at a particular block level. Default is 0"
	.ascii	".\n\t\t-m\tAutomatically remount underlying filesystem.\n\t\t"
	.ascii	"-r\tInject error over a particular logical range of an\n\t\t"
	.ascii	"\tobject.  Will be translated to the appropriate blkid\n\t\t"
	.ascii	"\trange according to the object's properties.\n\t\t-a\tFlush"
	.ascii	" the ARC cache.  Can be specified without any\n\t\t\tassocia"
	.ascii	"ted object.\n\t\t-u\tUnload the associated pool.  Can be spe"
	.ascii	"cified with only\n\t\t\ta pool object.\n\t\t-f\tOnly inject "
	.ascii	"errors a fraction of the time.  Expressed as\n\t\t\ta percen"
	.ascii	"tage between 0.0001 and 100.\n\n\t-"
	.ascii	"t data\t\tInject an error into the plain file contents of a\n"
	.ascii	"\t\t\tfile.  The object must be specified as a complete path"
	.ascii	"\n\t\t\tto a file on a ZFS filesystem.\n\n\t-t dnode\tInject"
	.ascii	" an error into the metadnode in the block\n\t\t\tcorrespondi"
	.ascii	"ng to the dnode for a file or directory.  The\n\t\t\t'-r' op"
	.ascii	"tion is incompatible with this mode.  The object\n\t\t\tis s"
	.ascii	"pecified as a"
	.string	" complete path to a file or directory\n\t\t\ton a ZFS filesystem.\n\n\t-t <mos>\tInject errors into the MOS for objects of the given\n\t\t\ttype.  Valid types are: mos, mosdir, config, bpobj,\n\t\t\tspacemap, metaslab, errlog.  The only valid <object> is\n\t\t\tthe poolname.\n"
	.text
	.p2align 4
	.globl	usage
	.type	usage, @function
usage:
.LFB0:
	.cfi_startproc
	endbr64
	lea	rdi, .LC0[rip]
	jmp	printf@PLT
	.cfi_endproc
.LFE0:
	.size	usage, .-usage
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	 1f - 0f
	.long	 4f - 1f
	.long	 5
0:
	.string	 "GNU"
1:
	.align 8
	.long	 0xc0000002
	.long	 3f - 2f
2:
	.long	 0x3
3:
	.align 8
4:

	.arch armv5t
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 2
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"extr_zinject.c_usage.c"
	.text
	.section	.rodata.str1.4,"aMS",%progbits,1
	.align	2
.LC0:
	.ascii	"usage:\012\012\011zinject\012\012\011\011List all a"
	.ascii	"ctive injection records.\012\012\011zinject -c <id|"
	.ascii	"all>\012\012\011\011Clear the particular record (if"
	.ascii	" given a numeric ID), or\012\011\011all records if "
	.ascii	"'all' is specified.\012\012\011zinject -p <function"
	.ascii	" name> pool\012\011\011Inject a panic fault at the "
	.ascii	"specified function. Only \012\011\011functions whic"
	.ascii	"h call spa_vdev_config_exit(), or \012\011\011spa_v"
	.ascii	"dev_exit() will trigger a panic.\012\012\011zinject"
	.ascii	" -d device [-e errno] [-L <nvlist|uber|pad1|pad2>] "
	.ascii	"[-F]\012\011\011[-T <read|write|free|claim|all>] [-"
	.ascii	"f frequency] pool\012\012\011\011Inject a fault int"
	.ascii	"o a particular device or the device's\012\011\011la"
	.ascii	"bel.  Label injection can either be 'nvlist', 'uber"
	.ascii	"',\012 \011\011'pad1', or 'pad2'.\012\011\011'errno"
	.ascii	"' can be 'nxio' (the default), 'io', 'dtl', or\012\011"
	.ascii	"\011'corrupt' (bit flip).\012\011\011'frequency' is"
	.ascii	" a value between 0.0001 and 100.0 that limits\012\011"
	.ascii	"\011device error injection to a percentage of the I"
	.ascii	"Os.\012\012\011zinject -d device -A <degrade|fault>"
	.ascii	" -D <delay secs> pool\012\011\011Perform a specific"
	.ascii	" action on a particular device.\012\012\011zinject "
	.ascii	"-d device -D latency:lanes pool\012\012\011\011Add "
	.ascii	"an artificial delay to IO requests on a particular\012"
	.ascii	"\011\011device, such that the requests take a minim"
	.ascii	"um of 'latency'\012\011\011milliseconds to complete"
	.ascii	". Each delay has an associated\012\011\011number of"
	.ascii	" 'lanes' which defines the number of concurrent\012"
	.ascii	"\011\011IO requests that can be processed.\012\012\011"
	.ascii	"\011For example, with a single lane delay of 10 ms "
	.ascii	"(-D 10:1),\012\011\011the device will only be able "
	.ascii	"to service a single IO request\012\011\011at a time"
	.ascii	" with each request taking 10 ms to complete. So,\012"
	.ascii	"\011\011if only a single request is submitted every"
	.ascii	" 10 ms, the\012\011\011average latency will be 10 m"
	.ascii	"s; but if more than one request\012\011\011is submi"
	.ascii	"tted every 10 ms, the average latency will be more\012"
	.ascii	"\011\011than 10 ms.\012\012\011\011Similarly, if a "
	.ascii	"delay of 10 ms is specified to have two\012\011\011"
	.ascii	"lanes (-D 10:2), then the device will be able to se"
	.ascii	"rvice\012\011\011two requests at a time, each with "
	.ascii	"a minimum latency of\012\011\01110 ms. So, if two r"
	.ascii	"equests are submitted every 10 ms, then\012\011\011"
	.ascii	"the average latency will be 10 ms; but if more than"
	.ascii	" two\012\011\011requests are submitted every 10 ms,"
	.ascii	" the average latency\012\011\011will be more than 1"
	.ascii	"0 ms.\012\012\011\011Also not"
	.ascii	"e, these delays are additive. So two invocations\012"
	.ascii	"\011\011of '-D 10:1', is roughly equivalent to a si"
	.ascii	"ngle invocation\012\011\011of '-D 10:2'. This also "
	.ascii	"means, one can specify multiple\012\011\011lanes wi"
	.ascii	"th differing target latencies. For example, an\012\011"
	.ascii	"\011invocation of '-D 10:1' followed by '-D 25:2' w"
	.ascii	"ill\012\011\011create 3 lanes on the device; one la"
	.ascii	"ne with a latency\012\011\011of 10 ms and two lanes"
	.ascii	" with a 25 ms latency.\012\012\011zinject -I [-s <s"
	.ascii	"econds> | -g <txgs>] pool\012\011\011Cause the pool"
	.ascii	" to stop writing blocks yet not\012\011\011report e"
	.ascii	"rrors for a duration.  Simulates buggy hardware\012"
	.ascii	"\011\011that fails to honor cache flush requests.\012"
	.ascii	"\011\011Default duration is 30 seconds.  The machin"
	.ascii	"e is panicked\012\011\011at the end of the duration"
	.ascii	".\012\012\011zinject -b objset:object:level:blkid p"
	.ascii	"ool\012\012\011\011Inject an error into pool 'pool'"
	.ascii	" with the numeric bookmark\012\011\011specified by "
	.ascii	"the remaining tuple.  Each number is in\012\011\011"
	.ascii	"hexadecimal, and only one block can be specified.\012"
	.ascii	"\012\011zinject [-q] <-t type> [-C dvas] [-e errno]"
	.ascii	" [-l level]\012\011\011[-r range] [-a] [-m] [-u] [-"
	.ascii	"f freq] <object>\012\012\011\011Inject an error int"
	.ascii	"o the object specified by the '-t' option\012\011\011"
	.ascii	"and the object descriptor.  The 'object' parameter "
	.ascii	"is\012\011\011interpreted depending on the '-t' opt"
	.ascii	"ion.\012\012\011\011-q\011Quiet mode.  Only print o"
	.ascii	"ut the handler number added.\012\011\011-e\011Injec"
	.ascii	"t a specific error.  Must be one of 'io',\012\011\011"
	.ascii	"\011'checksum', 'decompress', or 'decrypt'.  Defaul"
	.ascii	"t is 'io'.\012\011\011-C\011Inject the given error "
	.ascii	"only into specific DVAs. The\012\011\011\011DVAs sh"
	.ascii	"ould be specified as a list of 0-indexed DVAs\012\011"
	.ascii	"\011\011separated by commas (ex. '0,2').\012\011\011"
	.ascii	"-l\011Inject error at a particular block level. Def"
	.ascii	"ault is 0.\012\011\011-m\011Automatically remount u"
	.ascii	"nderlying filesystem.\012\011\011-r\011Inject error"
	.ascii	" over a particular logical range of an\012\011\011\011"
	.ascii	"object.  Will be translated to the appropriate blki"
	.ascii	"d\012\011\011\011range according to the object's pr"
	.ascii	"operties.\012\011\011-a\011Flush the ARC cache.  Ca"
	.ascii	"n be specified without any\012\011\011\011associate"
	.ascii	"d object.\012\011\011-u\011Unload the associated po"
	.ascii	"ol.  Can be specified with only\012\011\011\011a po"
	.ascii	"ol object.\012\011\011-f\011Only inject errors a fr"
	.ascii	"action of the time.  Expressed as\012\011\011\011a "
	.ascii	"percentage between 0.0001 and 100.\012\012\011-"
	.ascii	"t data\011\011Inject an error into the plain file c"
	.ascii	"ontents of a\012\011\011\011file.  The object must "
	.ascii	"be specified as a complete path\012\011\011\011to a"
	.ascii	" file on a ZFS filesystem.\012\012\011-t dnode\011I"
	.ascii	"nject an error into the metadnode in the block\012\011"
	.ascii	"\011\011corresponding to the dnode for a file or di"
	.ascii	"rectory.  The\012\011\011\011'-r' option is incompa"
	.ascii	"tible with this mode.  The object\012\011\011\011is"
	.ascii	" specified as a complete path to a file or director"
	.ascii	"y\012\011\011\011on a ZFS filesystem.\012\012\011-t"
	.ascii	" <mos>\011Inject errors into the MOS for objects of"
	.ascii	" the given\012\011\011\011type.  Valid types are: m"
	.ascii	"os, mosdir, config, bpobj,\012\011\011\011spacemap,"
	.ascii	" metaslab, errlog.  The only valid <object> is\012\011"
	.ascii	"\011\011the poolname.\012\000"
	.text
	.align	2
	.global	usage
	.syntax unified
	.arm
	.fpu softvfp
	.type	usage, %function
usage:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r0, .L3
	b	printf
.L4:
	.align	2
.L3:
	.word	.LC0
	.size	usage, .-usage
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
