#define _LUSTRE_USER_H
#include <asm/types.h>
+#define IOC_MDC_TYPE 'i'
+#define IOC_MDC_GETSTRIPE _IOWR(IOC_MDC_TYPE, 21, struct lov_mds_md *)
+
#define LL_IOC_GETFLAGS _IOR ('f', 151, long)
#define LL_IOC_SETFLAGS _IOW ('f', 152, long)
#define LL_IOC_CLRFLAGS _IOW ('f', 153, long)
struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */
} __attribute__((packed));
+extern int op_create_file(char *name, long stripe_size, int stripe_offset,
+ int stripe_count);
+extern int get_file_stripe(char *path, struct lov_user_md *lum);
+
#endif /* _LUSTRE_USER_H */
#define IOC_MDC_TYPE 'i'
#define IOC_MDC_MIN_NR 20
#define IOC_MDC_LOOKUP _IOWR(IOC_MDC_TYPE, 20, struct obd_device *)
-#define IOC_MDC_GETSTRIPE _IOWR(IOC_MDC_TYPE, 21, struct lov_mds_md *)
#define IOC_MDC_MAX_NR 50
#ifdef __KERNEL__
#include <liblustre.h>
#include <linux/lustre_idl.h>
+#include <linux/lustre_user.h>
#include "parser.h"
#include "obdctl.h"
-extern int op_create_file(char *name, long stripe_size, int stripe_offset,
- int stripe_count);
extern int op_find(char *path, struct obd_uuid *obduuid, int recursive,
int verbose, int quiet);
extern int op_check(int type_num, char **obd_type_p, char *dir);
}
}
+int get_file_stripe(char *path, struct lov_user_md *lum)
+{
+ char *dname, *fname;
+ int fd, rc = 0;
+
+ fname = strrchr(path, '/');
+
+ /* It should be a file (or other non-directory) */
+ if (fname == NULL) {
+ dname = (char *)malloc(2);
+ if (dname == NULL)
+ return ENOMEM;
+ strcpy(dname, ".");
+ fname = path;
+ } else {
+ dname = (char *)malloc(fname - path + 1);
+ if (dname == NULL)
+ return ENOMEM;
+ strncpy(dname, path, fname - path);
+ dname[fname - path + 1] = '\0';
+ fname++;
+ }
+
+ if ((fd = open(dname, O_RDONLY)) == -1) {
+ free(dname);
+ return errno;
+ }
+
+ strncpy((char *)lum, fname, sizeof(*lum));
+ if (ioctl(fd, IOC_MDC_GETSTRIPE, (void *)lum) == -1) {
+ close(fd);
+ free(dname);
+ return errno;
+ }
+
+ if (close(fd) == -1)
+ rc = errno;
+
+ free(dname);
+
+ return rc;
+}
+
static int process_file(DIR *dir, char *dname, char *fname,
struct find_param *param)
{