---
name: "ioctl_xfs_fsbulkstat"
section: "2"
platform: "linux"
package: "xfsprogs"
version: "7.2.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ioctl_xfs_fsbulkstat"
---

# ioctl\_xfs\_fsbulkstat(2)

query information for a batch of XFS inodes

## NAME

ioctl\_xfs\_fsbulkstat - query information for a batch of XFS inodes

## SYNOPSIS

**#include \<xfs/xfs\_fs.h\>**

**int ioctl(int** *fd***, XFS\_IOC\_FSBULKSTAT, struct xfs\_fsop\_bulkreq \****arg***);**\
 **int ioctl(int** *fd***, XFS\_IOC\_FSBULKSTAT\_SINGLE, struct xfs\_fsop\_bulkreq \****arg***);**

## DESCRIPTION

Query stat information for a group of XFS inodes.

NOTE: This ioctl has been superseded. Please see the [**ioctl\_xfs\_bulkstat**(2)](/ioctl_xfs_bulkstat/2.md) manpage for information about its replacement.

These ioctls use **struct xfs\_fsop\_bulkreq** to set up a bulk transfer with the kernel:

```
struct xfs_fsop_bulkreq {
	__u64             *lastip;
	__s32             count;
	void              *ubuffer;
	__s32             *ocount;
};
```

*lastip* points to a value that will receive the number of the "last inode." This cannot be NULL. For **FSBULKSTAT**, this should be set to one less than the number of the first inode for which the caller wants information, or zero to start with the first inode in the filesystem. For **FSBULKSTAT\_SINGLE**, this should be set to the number of the inode for which the caller wants information. After the call, this value will be set to the number of the last inode for which information was supplied. This field will not be updated if *ocount* is NULL.

*count* is the number of elements in the **ubuffer** array and therefore the number of inodes for which to return stat information. This value must be set to 1 for **FSBULKSTAT\_SINGLE**.

*ocount* points to a value that will receive the number of records returned. If this value is NULL, then neither *ocount* nor *lastip* will be updated.

*ubuffer* points to a memory buffer into which inode stat information will be copied. This buffer must be an array of **struct xfs\_bstat** which is described below. The array must have at least *count* elements.

```
struct xfs_bstat {
	__u64             bs_ino;
	__u16             bs_mode;
	__u16             bs_nlink;
	__u32             bs_uid;
	__u32             bs_gid;
	__u32             bs_rdev;
	__s32             bs_blksize;
	__s64             bs_size;
	struct xfs_bstime bs_atime;
	struct xfs_bstime bs_mtime;
	struct xfs_bstime bs_ctime;
	int64_t           bs_blocks;
	__u32             bs_xflags;
	__s32             bs_extsize;
	__s32             bs_extents;
	__u32             bs_gen;
	__u16             bs_projid_lo;
	__u16             bs_forkoff;
	__u16             bs_projid_hi;
	uint16_t          bs_sick;
	uint16_t          bs_checked;
	unsigned char     bs_pad[2];
	__u32             bs_cowextsize;
	__u32             bs_dmevmask;
	__u16             bs_dmstate;
	__u16             bs_aextents;
};
```

The structure members are as follows:

*bs\_ino* is the inode number for this record.

*bs\_mode* is the file type and mode.

*bs\_nlink* is the number of hard links to this inode.

*bs\_uid* is the user id.

*bs\_gid* is the group id.

*bs\_rdev* is the encoded device id if this is a special file.

*bs\_blksize* is the size of a data block for this file, in units of bytes.

*bs\_size* is the size of the file, in bytes.

*bs\_atime* is the last time this file was accessed.

*bs\_mtime* is the last time the contents of this file were modified.

*bs\_ctime* is the last time this inode record was modified.

*bs\_blocks* is the number of filesystem blocks allocated to this file, including metadata.

*bs\_xflags* contains the extended flags that are set on this inode. These flags are the same values as those defined in the **XFS INODE FLAGS** section of the  [**ioctl\_xfs\_fsgetxattr**(2)](/ioctl_xfs_fsgetxattr/2.md) manpage.

*bs\_extsize* is the extent size hint for this file, in bytes.

*bs\_extents* is the number of storage mappings associated with this file's data.

*bs\_gen* is the generation number of the inode record.

*bs\_projid\_lo* is the lower 16-bits of the project id.

*bs\_forkoff* is the offset of the attribute fork in the inode record, in bytes.

*bs\_projid\_hi* is the upper 16-bits of the project id.

*bs\_pad\[6\]* is zeroed.

*bs\_cowextsize* is the Copy on Write extent size hint for this file, in bytes.

*bs\_dmevmask* is unused on Linux.

*bs\_dmstate* is unused on Linux.

*bs\_aextents* is the number of storage mappings associated with this file's extended attributes.

The fields *bs\_sick* and *bs\_checked* indicate the relative health of various inode metadata:

- •

  If a given sick flag is set in *bs\_sick*, then that piece of metadata has been observed to be damaged. The same bit should be set in *bs\_checked*.

- •

  If a given sick flag is set in *bs\_checked* but is not set in *bs\_sick*, then that piece of metadata has been checked and is not faulty.

- •

  If a given sick flag is not set in *bs\_checked*, then no conclusion can be made.

The following flags apply to these fields:

- **XFS\_BS\_SICK\_INODE**

  The inode's record itself.

- **XFS\_BS\_SICK\_BMBTD**

  File data extent mappings.

- **XFS\_BS\_SICK\_BMBTA**

  Extended attribute extent mappings.

- **XFS\_BS\_SICK\_BMBTC**

  Copy on Write staging extent mappings.

- **XFS\_BS\_SICK\_DIR**

  Directory information.

- **XFS\_BS\_SICK\_XATTR**

  Extended attribute data.

- **XFS\_BS\_SICK\_SYMLINK**

  Symbolic link target.

- **XFS\_BS\_SICK\_PARENT**

  Parent pointers.

- **XFS\_BS\_SICK\_DIRTREE**

  Directory is the source of corruption in the directory tree.

## RETURN VALUE

On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

Error codes can be one of, but are not limited to, the following:

- **EFAULT**

  The kernel was not able to copy into the userspace buffer.

- **EFSBADCRC**

  Metadata checksum validation failed while performing the query.

- **EFSCORRUPTED**

  Metadata corruption was encountered while performing the query.

- **EINVAL**

  One of the arguments was not valid.

- **EIO**

  An I/O error was encountered while performing the query.

- **ENOMEM**

  There was insufficient memory to perform the query.

## CONFORMING TO

This API is specific to XFS filesystem on the Linux kernel.

## SEE ALSO

[**ioctl**(2)](/ioctl/2.md), [**ioctl\_xfs\_fsgetxattr**(2)](/ioctl_xfs_fsgetxattr/2.md)
