LLAPI\_FILE\_GET\_STRIPE(3) Lustre Library Functions LLAPI\_FILE\_GET\_STRIPE(3)

# [NAME](#NAME)

llapi\_file\_get\_stripe - get striping information for a file or a directory on a Lustre filesystem

# [SYNOPSIS](#SYNOPSIS)

```
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <lustre/lustreapi.h>
```

```
int llapi_file_get_stripe(const char *path, void *lum);
```

# [DESCRIPTION](#DESCRIPTION)

**llapi\_file\_get\_stripe()** returns striping information for a file or a directory *path* in *lum* (which should point to a large enough memory region) in one of the following formats:

```
struct lov_user_md_v1 {


        __u32 lmm_magic;


        __u32 lmm_pattern;


        __u64 lmm_object_id;


        __u64 lmm_object_seq;


        __u32 lmm_stripe_size;


        __u16 lmm_stripe_count;


        __u16 lmm_stripe_offset;


        struct lov_user_ost_data_v1 lmm_objects[];
} __attribute__((packed));
struct lov_user_md_v3 {


        __u32 lmm_magic;


        __u32 lmm_pattern;


        __u64 lmm_object_id;


        __u64 lmm_object_seq;


        __u32 lmm_stripe_size;


        __u16 lmm_stripe_count;


        __u16 lmm_stripe_offset;


        char  lmm_pool_name[LOV_MAXPOOLNAME + 1];


        struct lov_user_ost_data_v1 lmm_objects[];
} __attribute__((packed));
```

[*lmm\_magic*](#lmm_magic)

specifies the format of the returned striping information. **LOV\_MAGIC\_V1** is used for lov\_user\_md\_v1. **LOV\_MAGIC\_V3** is used for lov\_user\_md\_v3.

[*lmm\_pattern*](#lmm_pattern)

holds the striping pattern. Only **LOV\_PATTERN\_RAID0** is possible in this Lustre version.

[*lmm\_object\_id*](#lmm_object_id)

holds the MDS object id.

[*lmm\_object\_gr*](#lmm_object_gr)

holds the MDS object group.

[*lmm\_stripe\_size*](#lmm_stripe_size)

holds the stripe size in bytes.

[*lmm\_stripe\_count*](#lmm_stripe_count)

holds the number of OSTs the file is striped across.

[*lmm\_stripe\_offset*](#lmm_stripe_offset)

holds the OST index from which the file starts.

[*lmm\_pool\_name*](#lmm_pool_name)

holds the OST pool name to which the file belongs.

[*lmm\_objects*](#lmm_objects)

is an array of *lmm\_stripe\_count* members containing per OST file information in the following format:

```
struct lov_user_ost_data_v1 {


        __u64 l_object_id;


        __u64 l_object_seq;


        __u32 l_ost_gen;


        __u32 l_ost_idx;
} __attribute__((packed));
```

[*l\_object\_id*](#l_object_id)

holds the OST object id.

[*l\_object\_seq*](#l_object_seq)

holds the OST object group.

[*l\_ost\_gen*](#l_ost_gen)

holds the generation of the OST index.

[*l\_ost\_idx*](#l_ost_idx)

holds the OST index in LOV.

# [RETURN VALUES](#RETURN_VALUES)

**llapi\_file\_get\_stripe()** returns:

0

on success

!= 0

on failure, *errno* is set appropriately.

# [ERRORS](#ERRORS)

ENOMEM

failed to allocate memory.

ENAMETOOLONG

*path* was too long.

ENOENT

*path* does not point to a file or a directory.

ENOTTY

*path* does not point to a Lustre filesystem.

EFAULT

memory region pointed by *lum* is not properly mapped.

# [EXAMPLES](#EXAMPLES)

```
#include <sys/vfs.h>
#include <lustre/lustreapi.h>
static inline int maxint(int a, int b)
{


        return a > b ? a : b;
}
static void *alloc_lum()
{


        int v1, v3, join;


        v1 = sizeof(struct lov_user_md_v1) +


             LOV_MAX_STRIPE_COUNT * sizeof(struct lov_user_ost_data_v1);


        v3 = sizeof(struct lov_user_md_v3) +


             LOV_MAX_STRIPE_COUNT * sizeof(struct lov_user_ost_data_v1);


        return malloc(maxint(v1, v3));
}
int main(int argc, char** argv)
{


        struct lov_user_md *lum_file = NULL;


        int rc;


        int lum_size;


        if (argc != 2) {


                fprintf(stderr, "Usage: %s <filename>\n", argv[0]);


                return 1;


        }


        lum_file = alloc_lum();


        if (lum_file == NULL) {


                rc = ENOMEM;


                goto cleanup;


        }


        rc = llapi_file_get_stripe(argv[1], lum_file);


        if (rc) {


                rc = errno;


                goto cleanup;


        }


        /* stripe_size stripe_count */


        printf("%d %d\n",


               lum_file->lmm_stripe_size,


               lum_file->lmm_stripe_count);
cleanup:


        if (lum_file != NULL)


                free(lum_file);


        return rc;
}
```

# [AVAILABILITY](#AVAILABILITY)

**llapi\_file\_get\_stripe()** is part of the [**lustre**(7)](/man/enterprise-packages/lustre/lustre.7) user application interface library since release 2.4.0

# [SEE ALSO](#SEE_ALSO)

[**lustre**(7)](/man/enterprise-packages/lustre/lustre.7), [**lustreapi**(7)](/man/enterprise-packages/lustre/lustreapi.7)

2024-08-23 Lustre User API

---

Document: llapi_file_get_stripe(3) from lustre 2.17.60-r0 (Chainguard OS)
Source: https://github.com/lustre/lustre-release
