Viewing: lov_getstripe_old.c
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2021, DDN Storage Corporation.
*/
/*
* lustre/tests/lov_getstripe_old.c
*
* ll_getstripe_old <file>:
* - to verify if the striping information of composite layout files returned
* by llapi_file_get_stripe() is valid.
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/vfs.h>
#include <lustre/lustreapi.h>
#define LOV_MAGIC_MAGIC 0x0BD0
#define LOV_MAGIC_MASK 0xFFFF
#define LOV_MAGIC_V1 (0x0BD10000 | LOV_MAGIC_MAGIC)
#define LOV_MAGIC_JOIN_V1 (0x0BD20000 | LOV_MAGIC_MAGIC)
#define LOV_MAGIC_V3 (0x0BD30000 | LOV_MAGIC_MAGIC)
static inline int maxint(int a, int b)
{
return a > b ? a : b;
}
static void *alloc_lum()
{
int v1, v3;
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;
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 */
if (lum_file->lmm_magic == LOV_MAGIC_V1)
printf("lmm_magic: v1\n");
else if (lum_file->lmm_magic == LOV_MAGIC_V3)
printf("lmm_magic: v3\n");
else if (lum_file->lmm_magic == (0x0BD60000 | LOV_MAGIC_MAGIC))
printf("lmm_magic: LOV_MAGIC component\n");
printf("stripe_count: %d\nstripe_size: %d\n",
lum_file->lmm_stripe_count, lum_file->lmm_stripe_size);
cleanup:
if (lum_file != NULL)
free(lum_file);
return rc;
}