]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - man/man8/xfs_io.8
xfs_io: allow mmap command to reserve some free space
[thirdparty/xfsprogs-dev.git] / man / man8 / xfs_io.8
1 .TH xfs_io 8
2 .SH NAME
3 xfs_io \- debug the I/O path of an XFS filesystem
4 .SH SYNOPSIS
5 .B xfs_io
6 [
7 .B \-adfmrRstxT
8 ] [
9 .B \-c
10 .I cmd
11 ] ... [
12 .B \-p
13 .I prog
14 ]
15 .I file
16 .br
17 .B xfs_io \-V
18 .SH DESCRIPTION
19 .B xfs_io
20 is a debugging tool like
21 .BR xfs_db (8),
22 but is aimed at examining the regular file I/O paths rather than the
23 raw XFS volume itself.
24 These code paths include not only the obvious read/write/mmap interfaces
25 for manipulating files, but also cover all of the XFS extensions (such
26 as space preallocation, additional inode flags, etc).
27 .SH OPTIONS
28 .TP 1.0i
29 .BI \-c " cmd"
30 .B xfs_io
31 commands may be run interactively (the default) or as arguments on
32 the command line. Multiple
33 .B \-c
34 arguments may be given. The commands are run in the sequence given,
35 then the program exits.
36 .TP
37 .BI \-p " prog"
38 Set the program name for prompts and some error messages,
39 the default value is
40 .BR xfs_io .
41 .TP
42 .B \-f
43 Create
44 .I file
45 if it does not already exist.
46 .TP
47 .B \-r
48 Open
49 .I file
50 read-only, initially. This is required if
51 .I file
52 is immutable or append-only.
53 .TP
54 .B \-x
55 Expert mode. Dangerous commands are only available in this mode.
56 These commands also tend to require additional privileges.
57 .TP
58 .B \-V
59 Prints the version number and exits.
60 .PP
61 The other
62 .BR open (2)
63 options described below are also available from the command line.
64 .SH CONCEPTS
65 .B xfs_io
66 maintains a number of open files and memory mappings.
67 Files can be initially opened on the command line (optionally),
68 and additional files can also be opened later.
69 .PP
70 .B xfs_io
71 commands can be broken up into three groups.
72 Some commands are aimed at doing regular file I/O - read, write,
73 sync, space preallocation, etc.
74 .PP
75 The second set of commands exist for manipulating memory mapped regions
76 of a file - mapping, accessing, storing, unmapping, flushing, etc.
77 .PP
78 The remaining commands are for the navigation and display of data
79 structures relating to the open files, mappings, and the filesystems
80 where they reside.
81 .PP
82 Many commands have extensive online help. Use the
83 .B help
84 command for more details on any command.
85 .SH FILE I/O COMMANDS
86 .TP
87 .BI "file [ " N " ]"
88 Display a list of all open files and (optionally) switch to an alternate
89 current open file.
90 .TP
91 .BI "open [[ \-acdfrstRT ] " path " ]"
92 Closes the current file, and opens the file specified by
93 .I path
94 instead. Without any arguments, displays statistics about the current
95 file \- see the
96 .B stat
97 command.
98 .RS 1.0i
99 .PD 0
100 .TP 0.4i
101 .B \-a
102 opens append-only (O_APPEND).
103 .TP
104 .B \-d
105 opens for direct I/O (O_DIRECT).
106 .TP
107 .B \-f
108 creates the file if it doesn't already exist (O_CREAT).
109 .TP
110 .B \-r
111 opens read-only (O_RDONLY).
112 .TP
113 .B \-s
114 opens for synchronous I/O (O_SYNC).
115 .TP
116 .B \-t
117 truncates on open (O_TRUNC).
118 .TP
119 .B \-n
120 opens in non-blocking mode if possible (O_NONBLOCK).
121 .TP
122 .B \-T
123 create a temporary file not linked into the filesystem namespace
124 (O_TMPFILE). The pathname passed must refer to a directory which
125 is treated as virtual parent for the newly created invisible file.
126 Can not be used together with the
127 .B \-r
128 option.
129 .TP
130 .B \-R
131 marks the file as a realtime XFS file after
132 opening it, if it is not already marked as such.
133 .PD
134 .RE
135 .TP
136 .B o
137 See the
138 .B open
139 command.
140 .TP
141 .B close
142 Closes the current open file, marking the next open file as current
143 (if one exists).
144 .TP
145 .B c
146 See the
147 .B close
148 command.
149 .TP
150 .BI "pread [ \-b " bsize " ] [ \-v ] [ \-FBR [ \-Z " seed " ] ] [ \-V " vectors " ] " "offset length"
151 Reads a range of bytes in a specified blocksize from the given
152 .IR offset .
153 .RS 1.0i
154 .PD 0
155 .TP 0.4i
156 .B \-b
157 can be used to set the blocksize into which the
158 .BR read (2)
159 requests will be split. The default blocksize is 4096 bytes.
160 .TP
161 .B \-v
162 dump the contents of the buffer after reading,
163 by default only the count of bytes actually read is dumped.
164 .TP
165 .B \-F
166 read the buffers in a forwards sequential direction.
167 .TP
168 .B \-B
169 read the buffers in a reserve sequential direction.
170 .TP
171 .B \-R
172 read the buffers in the give range in a random order.
173 .TP
174 .B \-Z seed
175 specify the random number seed used for random reads.
176 .TP
177 .B \-V vectors
178 Use the vectored IO read syscall
179 .BR preadv (2)
180 with a number of blocksize length iovecs. The number of iovecs is set by the
181 .I vectors
182 parameter.
183 .PD
184 .RE
185 .TP
186 .B r
187 See the
188 .B pread
189 command.
190 .TP
191 .BI "pwrite [ \-i " file " ] [ \-d ] [ \-s " skip " ] [ \-b " size " ] [ \-S " seed " ] [ \-FBR [ \-Z " zeed " ] ] [ \-wW ] [ \-V " vectors " ] " "offset length"
192 Writes a range of bytes in a specified blocksize from the given
193 .IR offset .
194 The bytes written can be either a set pattern or read in from another
195 file before writing.
196 .RS 1.0i
197 .PD 0
198 .TP 0.4i
199 .B \-i
200 allows an input
201 .I file
202 to be specified as the source of the data to be written.
203 .TP
204 .B \-d
205 causes direct I/O, rather than the usual buffered
206 I/O, to be used when reading the input file.
207 .TP
208 .B \-s
209 specifies the number of bytes to
210 .I skip
211 from the start of the input file before starting to read.
212 .TP
213 .B \-b
214 used to set the blocksize into which the
215 .BR write (2)
216 requests will be split. The default blocksize is 4096 bytes.
217 .TP
218 .B \-S
219 used to set the (repeated) fill pattern which
220 is used when the data to write is not coming from a file.
221 The default buffer fill pattern value is 0xcdcdcdcd.
222 .TP
223 .B \-F
224 write the buffers in a forwards sequential direction.
225 .TP
226 .B \-B
227 write the buffers in a reserve sequential direction.
228 .TP
229 .B \-R
230 write the buffers in the give range in a random order.
231 .TP
232 .B \-Z seed
233 specify the random number seed used for random write
234 .TP
235 .B \-w
236 call
237 .BR fdatasync (2)
238 once all writes are complete (included in timing results)
239 .TP
240 .B \-W
241 call
242 .BR fsync (2)
243 once all writes are complete (included in timing results)
244 .TP
245 .B \-V vectors
246 Use the vectored IO write syscall
247 .BR pwritev (2)
248 with a number of blocksize length iovecs. The number of iovecs is set by the
249 .I vectors
250 parameter.
251 .RE
252 .PD
253 .TP
254 .B w
255 See the
256 .B pwrite
257 command.
258 .TP
259 .BI "bmap [ \-adlpv ] [ \-n " nx " ]"
260 Prints the block mapping for the current open file. Refer to the
261 .BR xfs_bmap (8)
262 manual page for complete documentation.
263 .TP
264 .BI "fiemap [ \-alv ] [ \-n " nx " ]"
265 Prints the block mapping for the current open file using the fiemap
266 ioctl. Options behave as described in the
267 .BR xfs_bmap (8)
268 manual page.
269 .TP
270 .BI "extsize [ \-R | \-D ] [ " value " ]"
271 Display and/or modify the preferred extent size used when allocating
272 space for the currently open file. If the
273 .B \-R
274 option is specified, a recursive descent is performed
275 for all directory entries below the currently open file
276 .RB ( \-D
277 can be used to restrict the output to directories only).
278 If the target file is a directory, then the inherited extent size
279 is set for that directory (new files created in that directory
280 inherit that extent size).
281 The
282 .I value
283 should be specified in bytes, or using one of the usual units suffixes
284 (k, m, g, b, etc). The extent size is always reported in units of bytes.
285 .TP
286 .BI "allocsp " size " 0"
287 Sets the size of the file to
288 .I size
289 and zeroes any additional space allocated using the
290 XFS_IOC_ALLOCSP/XFS_IOC_FREESP system call described in the
291 .BR xfsctl (3)
292 manual page.
293 .B allocsp
294 and
295 .B freesp
296 do exactly the same thing.
297 .TP
298 .BI "freesp " size " 0"
299 See the
300 .B allocsp
301 command.
302 .TP
303 .BI "fadvise [ \-r | \-s | [[ \-d | \-n | \-w ] " "offset length " ]]
304 On platforms which support it, allows hints be given to the system
305 regarding the expected I/O patterns on the file.
306 The range arguments are required by some advise commands ([*] below), and
307 the others must have no range arguments.
308 With no arguments, the POSIX_FADV_NORMAL advice is implied (default readahead).
309 .RS 1.0i
310 .PD 0
311 .TP 0.4i
312 .B \-d
313 the data will not be accessed again in the near future (POSIX_FADV_DONTNEED[*]).
314 .TP
315 .B \-n
316 data will be accessed once and not be reused (POSIX_FADV_NOREUSE[*]).
317 .TP
318 .B \-r
319 expect access to data in random order (POSIX_FADV_RANDOM), which sets readahead to zero.
320 .TP
321 .B \-s
322 expect access to data in sequential order (POSIX_FADV_SEQUENTIAL),
323 which doubles the default readahead on the file.
324 .TP
325 .B \-w
326 advises the specified data will be needed again (POSIX_FADV_WILLNEED[*])
327 which forces the maximum readahead.
328 .RE
329 .PD
330 .TP
331 .B fdatasync
332 Calls
333 .BR fdatasync (2)
334 to flush the file's in-core data to disk.
335 .TP
336 .B fsync
337 Calls
338 .BR fsync (2)
339 to flush all in-core file state to disk.
340 .TP
341 .B s
342 See the
343 .B fsync
344 command.
345 .TP
346 .BI "sync_range [ \-a | \-b | \-w ] offset length "
347 On platforms which support it, allows control of syncing a range of the file to
348 disk. With no options, SYNC_FILE_RANGE_WRITE is implied on the range supplied.
349 .RS 1.0i
350 .PD 0
351 .TP 0.4i
352 .B \-a
353 wait for IO in the given range to finish after writing
354 (SYNC_FILE_RANGE_WAIT_AFTER).
355 .TP
356 .B \-b
357 wait for IO in the given range to finish before writing
358 (SYNC_FILE_RANGE_WAIT_BEFORE).
359 .TP
360 .B \-w
361 start writeback of dirty data in the given range (SYNC_FILE_RANGE_WRITE).
362 .RE
363 .PD
364 .TP
365 .B sync
366 Calls
367 .BR sync (2)
368 to flush all filesystems' in-core data to disk.
369 .TP
370 .B syncfs
371 Calls
372 .BR syncfs (2)
373 to flush this filesystem's in-core data to disk.
374 .TP
375 .BI resvsp " offset length"
376 Allocates reserved, unwritten space for part of a file using the
377 XFS_IOC_RESVSP system call described in the
378 .BR xfsctl (3)
379 manual page.
380 .TP
381 .BI unresvsp " offset length"
382 Frees reserved space for part of a file using the XFS_IOC_UNRESVSP
383 system call described in the
384 .BR xfsctl (3)
385 manual page.
386 .TP
387 .BI "falloc [ \-k ]" " offset length"
388 Allocates reserved, unwritten space for part of a file using the
389 fallocate routine as described in the
390 .BR fallocate (2)
391 manual page.
392 .RS 1.0i
393 .PD 0
394 .TP 0.4i
395 .B \-k
396 will set the FALLOC_FL_KEEP_SIZE flag as described in
397 .BR fallocate (2).
398 .PD
399 .RE
400 .TP
401 .BI fcollapse " offset length"
402 Call fallocate with FALLOC_FL_COLLAPSE_RANGE flag as described in the
403 .BR fallocate (2)
404 manual page to de-allocates blocks and eliminates the hole created in this process
405 by shifting data blocks into the hole.
406 .TP
407 .BI finsert " offset length"
408 Call fallocate with FALLOC_FL_INSERT_RANGE flag as described in the
409 .BR fallocate (2)
410 manual page to create the hole by shifting data blocks.
411 .TP
412 .BI fpunch " offset length"
413 Punches (de-allocates) blocks in the file by calling fallocate with
414 the FALLOC_FL_PUNCH_HOLE flag as described in the
415 .BR fallocate (2)
416 manual page.
417 .TP
418 .BI fzero " offset length"
419 Call fallocate with FALLOC_FL_ZERO_RANGE flag as described in the
420 .BR fallocate (2)
421 manual page to allocate and zero blocks within the range.
422 .TP
423 .BI zero " offset length"
424 Call xfsctl with
425 .B XFS_IOC_ZERO_RANGE
426 as described in the
427 .BR xfsctl (3)
428 manual page to allocate and zero blocks within the range.
429 .TP
430 .BI truncate " offset"
431 Truncates the current file at the given offset using
432 .BR ftruncate (2).
433 .TP
434 .BI "sendfile \-i " srcfile " | \-f " N " [ " "offset length " ]
435 On platforms which support it, allows a direct in-kernel copy between
436 two file descriptors. The current open file is the target, the source
437 must be specified as another open file
438 .RB ( \-f )
439 or by path
440 .RB ( \-i ).
441 .TP
442 .BI "readdir [ -v ] [ -o " offset " ] [ -l " length " ] "
443 Read a range of directory entries from a given offset of a directory.
444 .RS 1.0i
445 .PD 0
446 .TP 0.4i
447 .B \-v
448 verbose mode - dump dirent content as defined in
449 .BR readdir (3)
450 .TP
451 .B \-o
452 specify starting
453 .I offset
454 .TP
455 .B \-l
456 specify total
457 .I length
458 to read (in bytes)
459 .RE
460 .PD
461 .TP
462 .TP
463 .BI "seek \-a | \-d | \-h [ \-r ] [ \-s ] offset"
464 On platforms that support the
465 .BR lseek (2)
466 .B SEEK_DATA
467 and
468 .B SEEK_HOLE
469 options, display the offsets of the specified segments.
470 .RS 1.0i
471 .PD 0
472 .TP 0.4i
473 .B \-a
474 Display both
475 .B data
476 and
477 .B hole
478 segments starting at the specified
479 .B offset.
480 .TP
481 .B \-d
482 Display the
483 .B data
484 segment starting at the specified
485 .B offset.
486 .TP
487 .B \-h
488 Display the
489 .B hole
490 segment starting at the specified
491 .B offset.
492 .TP
493 .B \-r
494 Recursively display all the specified segments starting at the specified
495 .B offset.
496 .TP
497 .B \-s
498 Display the starting lseek(2) offset. This offset will be a calculated value when
499 both data and holes are displayed together or performing a recusively display.
500 .RE
501 .PD
502 .TP
503 .TP
504 .BI "reflink [ \-C ] [ \-q ] src_file [src_offset dst_offset length]"
505 On filesystems that support the
506 .B XFS_IOC_CLONE_RANGE
507 or
508 .B BTRFS_IOC_CLONE_RANGE
509 ioctls, map
510 .I length
511 bytes at offset
512 .I dst_offset
513 in the open file to the same physical blocks that are mapped at offset
514 .I src_offset
515 in the file
516 .I src_file
517 , replacing any contents that may already have been there. If a program
518 writes into a reflinked block range of either file, the dirty blocks will be
519 cloned, written to, and remapped ("copy on write") in the affected file,
520 leaving the other file(s) unchanged. If src_offset, dst_offset, and length
521 are omitted, all contents of src_file will be reflinked into the open file.
522 .RS 1.0i
523 .PD 0
524 .TP 0.4i
525 .B \-C
526 Print timing statistics in a condensed format.
527 .TP
528 .B \-q
529 Do not print timing statistics at all.
530 .RE
531 .PD
532 .TP
533 .TP
534 .BI "dedupe [ \-C ] [ \-q ] src_file src_offset dst_offset length"
535 On filesystems that support the
536 .B XFS_IOC_FILE_EXTENT_SAME
537 or
538 .B BTRFS_IOC_FILE_EXTENT_SAME
539 ioctls, map
540 .I length
541 bytes at offset
542 .I dst_offset
543 in the open file to the same physical blocks that are mapped at offset
544 .I src_offset
545 in the file
546 .I src_file
547 , but only if the contents of both ranges are identical. This is known as
548 block-based deduplication. If a program writes into a reflinked block range of
549 either file, the dirty blocks will be cloned, written to, and remapped ("copy
550 on write") in the affected file, leaving the other file(s) unchanged.
551 .RS 1.0i
552 .PD 0
553 .TP 0.4i
554 .B \-C
555 Print timing statistics in a condensed format.
556 .TP
557 .B \-q
558 Do not print timing statistics at all.
559
560 .SH MEMORY MAPPED I/O COMMANDS
561 .TP
562 .BI "mmap [ " N " | [[ \-rwx ] [\-s " size " ] " "offset length " ]]
563 With no arguments,
564 .B mmap
565 shows the current mappings. Specifying a single numeric argument
566 .I N
567 sets the current mapping. If two arguments are specified (a range specified by
568 .I offset
569 and
570 .IR length ),
571 a new mapping is created spanning the range, and the protection mode can
572 be given as a combination of PROT_READ
573 .RB ( \-r ),
574 PROT_WRITE
575 .RB ( \-w ),
576 and PROT_EXEC
577 .RB ( \-x ).
578 .BI \-s " size"
579 is used to do a mmap(size) && munmap(size) operation at first, try to reserve some
580 extendible free memory space, if
581 .I size
582 is bigger than
583 .I length
584 parameter. But there's not guarantee that the memory after
585 .I length
586 ( up to
587 .I size
588 ) will stay free.
589 .B e.g.
590 "mmap -rw -s 8192 1024" will mmap 0 ~ 1024 bytes memory, but try to reserve 1024 ~ 8192
591 free space(no guarantee). This free space will helpful for "mremap 8192" without
592 MREMAP_MAYMOVE flag.
593 .TP
594 .B mm
595 See the
596 .B mmap
597 command.
598 .TP
599 .BI "mremap [ \-f <new_address> ] [ \-m ] " new_length
600 Changes the current mapping size to
601 .IR new_length .
602 Whether the mapping may be moved is controlled by the flags passed;
603 MREMAP_FIXED
604 .RB ( \-f ),
605 or MREMAP_MAYMOVE
606 .RB ( \-m ).
607 .IR new_length
608 specifies a page-aligned address to which the mapping must be moved. It
609 can be setted to 139946004389888, 4096k or 1g etc.
610 .TP
611 .B mrm
612 See the
613 .B mremap
614 command.
615 .TP
616 .B munmap
617 Unmaps the current memory mapping.
618 .TP
619 .B mu
620 See the
621 .B munmap
622 command.
623 .TP
624 .BI "mread [ \-f | \-v ] [ \-r ] [" " offset length " ]
625 Accesses a segment of the current memory mapping, optionally dumping it to
626 the standard output stream (with
627 .B \-v
628 or
629 .B \-f
630 option) for inspection. The accesses are performed sequentially from the start
631 .I offset
632 by default, but can also be done from the end backwards through the
633 mapping if the
634 .B \-r
635 option in specified.
636 The two verbose modes differ only in the relative offsets they display, the
637 .B \-f
638 option is relative to file start, whereas
639 .B \-v
640 shows offsets relative to the start of the mapping.
641 .TP
642 .B mr
643 See the
644 .B mread
645 command.
646 .TP
647 .BI "mwrite [ \-r ] [ \-S " seed " ] [ " "offset length " ]
648 Stores a byte into memory for a range within a mapping.
649 The default stored value is 'X', repeated to fill the range specified,
650 but this can be changed using the
651 .B \-S
652 option.
653 The memory stores are performed sequentially from the start offset by default,
654 but can also be done from the end backwards through the mapping if the
655 .B \-r
656 option in specified.
657 .TP
658 .B mw
659 See the
660 .B mwrite
661 command.
662 .TP
663 .BI "msync [ \-i ] [ \-a | \-s ] [ " "offset length " ]
664 Writes all modified copies of pages over the specified range (or entire
665 mapping if no range specified) to their backing storage locations.
666 Also, optionally invalidates
667 .RB ( \-i )
668 so that subsequent references to the pages will be obtained from their
669 backing storage locations (instead of cached copies).
670 The flush can be done synchronously
671 .RB ( \-s)
672 or asynchronously
673 .RB ( \-a ).
674 .TP
675 .B ms
676 See the
677 .B msync
678 command.
679 .TP
680 .BI "madvise [ \-d | \-r | \-s | \-w ] [ " "offset length " ]
681 Modifies page cache behavior when operating on the current mapping.
682 The range arguments are required by some advise commands ([*] below).
683 With no arguments, the POSIX_MADV_NORMAL advice is implied (default readahead).
684 .RS 1.0i
685 .PD 0
686 .TP 0.4i
687 .B \-d
688 the pages will not be needed (POSIX_MADV_DONTNEED[*]).
689 .TP
690 .B \-r
691 expect random page references (POSIX_MADV_RANDOM), which sets readahead to zero.
692 .TP
693 .B \-s
694 expect sequential page references (POSIX_MADV_SEQUENTIAL),
695 which doubles the default readahead on the file.
696 .TP
697 .B \-w
698 advises the specified pages will be needed again (POSIX_MADV_WILLNEED[*])
699 which forces the maximum readahead.
700 .RE
701 .PD
702 .TP
703 .B mincore
704 Dumps a list of pages or ranges of pages that are currently in core,
705 for the current memory mapping.
706
707 .SH OTHER COMMANDS
708 .TP
709 .BR "help [ " command " ]"
710 Display a brief description of one or all commands.
711 .TP
712 .B print
713 Display a list of all open files and memory mapped regions.
714 The current file and current mapping are distinguishable from
715 any others.
716 .TP
717 .B p
718 See the
719 .B print
720 command.
721 .TP
722 .B quit
723 Exit
724 .BR xfs_io .
725 .TP
726 .B q
727 See the
728 .B quit
729 command.
730 .TP
731 .BR lsattr " [ " \-R " | " \-D " | " \-a " | " \-v " ]"
732 List extended inode flags on the currently open file. If the
733 .B \-R
734 option is specified, a recursive descent is performed
735 for all directory entries below the currently open file
736 .RB ( \-D
737 can be used to restrict the output to directories only).
738 This is a depth first descent, it does not follow symlinks and
739 it also does not cross mount points.
740 .TP
741 .BR chattr " [ " \-R " | " \-D " ] [ " + / \-riasAdtPneEfS " ]"
742 Change extended inode flags on the currently open file. The
743 .B \-R
744 and
745 .B \-D
746 options have the same meaning as above. The mapping between each
747 letter and the inode flags (refer to
748 .BR xfsctl (3)
749 for the full list) is available via the
750 .B help
751 command.
752 .TP
753 .B freeze
754 Suspend all write I/O requests to the filesystem of the current file.
755 Only available in expert mode and requires privileges.
756 .TP
757 .B thaw
758 Undo the effects of a filesystem freeze operation.
759 Only available in expert mode and requires privileges.
760 .TP
761 .BI "flink " path
762 Link the currently open file descriptor into the filesystem namespace.
763 .TP
764 .BI "inject [ " tag " ]"
765 Inject errors into a filesystem to observe filesystem behavior at
766 specific points under adverse conditions. Without the
767 .I tag
768 argument, displays the list of error tags available.
769 Only available in expert mode and requires privileges.
770 .TP
771 .BI "resblks [ " blocks " ]"
772 Get and/or set count of reserved filesystem blocks using the
773 XFS_IOC_GET_RESBLKS or XFS_IOC_SET_RESBLKS system calls.
774 Note \-\- this can be useful for exercising out of space behavior.
775 Only available in expert mode and requires privileges.
776 .TP
777 .BR shutdown " [ " \-f " ]"
778 Force the filesystem to shutdown (with or without flushing the log).
779 Only available in expert mode and requires privileges.
780 .TP
781 .BR stat " [ " \-v " ]"
782 Selected statistics from
783 .BR stat (2)
784 and the XFS_IOC_GETXATTR system call on the current file. If the
785 .B \-v
786 option is specified, the atime (last access), mtime
787 (last modify), and ctime (last change) timestamps are also displayed.
788 .TP
789 .B statfs
790 Selected statistics from
791 .BR statfs (2)
792 and the XFS_IOC_FSGEOMETRY
793 system call on the filesystem where the current file resides.
794 .TP
795 .BR chproj " [ " \-R | \-D " ]"
796 Modifies the project identifier associated with the current path. The
797 .B \-R
798 option will recursively descend if the current path is a directory. The
799 .B \-D
800 option will also recursively descend, only setting modifying projects
801 on subdirectories. See the
802 .BR xfs_quota (8)
803 manual page for more information about project identifiers.
804 .TP
805 .BR lsproj " [ " \-R | \-D " ]"
806 Displays the project identifier associated with the current path. The
807 .B \-R
808 and
809 .B \-D
810 options behave as described above, in
811 .B chproj.
812 .TP
813 .BR parent " [ " \-cpv " ]"
814 By default this command prints out the parent inode numbers,
815 inode generation numbers and basenames of all the hardlinks which
816 point to the inode of the current file.
817 .RS 1.0i
818 .PD 0
819 .TP 0.4i
820 .B \-p
821 the output is similar to the default output except pathnames up to
822 the mount-point are printed out instead of the component name.
823 .TP
824 .B \-c
825 the file's filesystem will check all the parent attributes for consistency.
826 .TP
827 .B \-v
828 verbose output will be printed.
829 .RE
830 .IP
831 .B [NOTE: Not currently operational on Linux.]
832 .PD
833
834 .SH SEE ALSO
835 .BR mkfs.xfs (8),
836 .BR xfsctl (3),
837 .BR xfs_bmap (8),
838 .BR xfs_db (8),
839 .BR xfs (5),
840 .BR fdatasync (2),
841 .BR fstat (2),
842 .BR fstatfs (2),
843 .BR fsync (2),
844 .BR ftruncate (2),
845 .BR mmap (2),
846 .BR msync (2),
847 .BR open (2),
848 .BR pread (2),
849 .BR pwrite (2),
850 .BR readdir (3).