fprintf(stderr, ": %s (%d)\n", strerror(tmp_errno), tmp_errno);
}
-int llapi_file_create(const char *name, unsigned long stripe_size, int stripe_offset,
- int stripe_count, int stripe_pattern)
+int llapi_file_open(const char *name, int flags, int mode,
+ unsigned long stripe_size, int stripe_offset,
+ int stripe_count, int stripe_pattern)
{
struct lov_user_md lum = { 0 };
int fd, rc = 0;
int isdir = 0;
int page_size;
- fd = open(name, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
- if (errno == EISDIR) {
+ fd = open(name, flags | O_LOV_DELAY_CREATE, mode);
+ if (fd < 0 && errno == EISDIR) {
fd = open(name, O_DIRECTORY | O_RDONLY);
isdir++;
}
(__u64)LL_IOC_LOV_SETSTRIPE, name, fd, errmsg);
}
out:
- if (close(fd) < 0) {
- if (rc == 0)
- rc = -errno;
- err_msg("error on close for '%s' (%d)", name, fd);
+ if (rc) {
+ close(fd);
+ fd = rc;
}
- return rc;
+
+ return fd;
+}
+
+int llapi_file_create(const char *name, unsigned long stripe_size,
+ int stripe_offset, int stripe_count, int stripe_pattern)
+{
+ int fd;
+
+ fd = llapi_file_open(name, O_CREAT | O_WRONLY, 0644, stripe_size,
+ stripe_offset, stripe_count, stripe_pattern);
+ if (fd < 0)
+ return fd;
+
+ close(fd);
+ return 0;
}
typedef int (semantic_func_t)(char *path, DIR *parent, DIR *d, void *data);
decision = -1;
/* If a OST UUID is given, and some OST matches, check it here. */
- if (decision != -1 && param->obdindex != OBD_NOT_FOUND) {
+ if (decision != -1 && param->obdindex != OBD_NOT_FOUND &&
+ S_ISREG(st->st_mode)) {
/* Only those files should be accepted, which have a strip on
* the specified OST. */
if (!param->lmd->lmd_lmm.lmm_stripe_count) {
if (!decision) {
int for_mds;
- for_mds = lustre_fs ? param->lmd->lmd_lmm.lmm_stripe_count : 0;
+ for_mds = lustre_fs ? (S_ISREG(st->st_mode) &&
+ param->lmd->lmd_lmm.lmm_stripe_count)
+ : 0;
decision = find_time_check(st, param, for_mds);
}
/* If file still fits the request, ask osd for updated info.
The regulat stat is almost of the same speed as some new
'glimpse-size-ioctl'. */
- if (!decision && param->lmd->lmd_lmm.lmm_stripe_count) {
+ if (!decision && param->lmd->lmd_lmm.lmm_stripe_count &&
+ S_ISREG(st->st_mode)) {
if (param->obdindex != OBD_NOT_FOUND) {
/* Check whether the obd is active or not, if it is
* not active, just print the object affected by this