STATS_OFF,
};
-static int lfs_migrate_to_dom(int fd, int fdv, char *name,
+static int lfs_migrate_to_dom(int fd_src, int fd_dst, char *name,
__u64 migration_flags,
unsigned long long bandwidth_bytes_sec,
enum stats_flag stats_flag,
static int
migrate_open_files(const char *name, __u64 migration_flags,
const struct llapi_stripe_param *param,
- struct llapi_layout *layout, int *fd_src, int *fd_tgt)
+ struct llapi_layout *layout, int *fd_src_ptr,
+ int *fd_dst_ptr)
{
- int fd = -1;
- int fdv = -1;
+ int fd_src = -1;
+ int fd_dst = -1;
int rflags;
int mdt_index;
int random_value;
if (!(migration_flags & LLAPI_MIGRATION_NONDIRECT))
rflags |= O_DIRECT;
source_open:
- fd = open(name, rflags);
- if (fd < 0) {
+ fd_src = open(name, rflags);
+ if (fd_src < 0) {
/* If encrypted file without the key,
* retry mirror extend in O_DIRECT.
*/
return rc;
}
- rc = llapi_file_fget_mdtidx(fd, &mdt_index);
+ rc = llapi_file_fget_mdtidx(fd_src, &mdt_index);
if (rc < 0) {
error_loc = "cannot get MDT index";
goto out;
rc = snprintf(volatile_file, sizeof(volatile_file),
"%s/%s:%.4X:%.4X:fd=%.2d", parent,
LUSTRE_VOLATILE_HDR, mdt_index,
- random_value, fd);
+ random_value, fd_src);
if (rc >= sizeof(volatile_file)) {
rc = -ENAMETOOLONG;
break;
/* create, open a volatile file, use caching (ie no directio) */
if (layout) {
/* Returns -1 and sets errno on error: */
- fdv = llapi_layout_file_open(volatile_file, open_flags,
- open_mode, layout);
- if (fdv < 0)
- fdv = -errno;
+ fd_dst = llapi_layout_file_open(volatile_file,
+ open_flags, open_mode,
+ layout);
+ if (fd_dst < 0)
+ fd_dst = -errno;
} else {
/* Does the right thing on error: */
- fdv = llapi_file_open_param(volatile_file, open_flags,
- open_mode, param);
+ fd_dst = llapi_file_open_param(volatile_file,
+ open_flags,
+ open_mode, param);
}
- } while (fdv < 0 && (rc = fdv) == -EEXIST);
+ } while (fd_dst < 0 && (rc = fd_dst) == -EEXIST);
if (rc < 0) {
error_loc = "cannot create volatile file";
* Need to set owner/group of volatile file like original.
* This will allow to pass related check during layout_swap.
*/
- rc = fstat(fd, &st);
+ rc = fstat(fd_src, &st);
if (rc != 0) {
rc = -errno;
error_loc = "cannot stat source file";
goto out;
}
- rc = fstat(fdv, &stv);
+ rc = fstat(fd_dst, &stv);
if (rc != 0) {
rc = -errno;
error_loc = "cannot stat volatile";
}
if (st.st_uid != stv.st_uid || st.st_gid != stv.st_gid) {
- rc = fchown(fdv, st.st_uid, st.st_gid);
+ rc = fchown(fd_dst, st.st_uid, st.st_gid);
if (rc != 0) {
rc = -errno;
error_loc = "cannot change ownwership of volatile";
out:
if (rc < 0) {
- if (fd > 0)
- close(fd);
- if (fdv > 0)
- close(fdv);
+ if (fd_src > 0)
+ close(fd_src);
+ if (fd_dst > 0)
+ close(fd_dst);
} else {
- *fd_src = fd;
- *fd_tgt = fdv;
+ *fd_src_ptr = fd_src;
+ *fd_dst_ptr = fd_dst;
error_loc = NULL;
}
return rc;
return futimes(fd, tv);
}
-static int migrate_block(int fd, int fdv,
+static int migrate_block(int fd_src, int fd_dst,
unsigned long long bandwidth_bytes_sec,
enum stats_flag stats_flag,
long stats_interval_sec)
/* The grouplock blocks all concurrent accesses to the file. */
- rc = llapi_group_lock(fd, gid);
+ rc = llapi_group_lock(fd_src, gid);
if (rc < 0) {
error_loc = "cannot get group lock";
return rc;
}
- rc = fstat(fd, &st);
+ rc = fstat(fd_src, &st);
if (rc < 0) {
error_loc = "cannot stat source file";
rc = -errno;
* get extent locks on the OST objects. This will conflict with our
* extent group locks.
*/
- rc = llapi_get_data_version(fd, &dv1, 0);
+ rc = llapi_get_data_version(fd_src, &dv1, 0);
if (rc < 0) {
error_loc = "cannot get dataversion";
goto out_unlock;
}
- rc = migrate_copy_data(fd, fdv, NULL, bandwidth_bytes_sec,
+ rc = migrate_copy_data(fd_src, fd_dst, NULL, bandwidth_bytes_sec,
stats_flag, stats_interval_sec,
st.st_size);
if (rc < 0) {
}
/* Make sure we keep original atime/mtime values */
- rc = migrate_set_timestamps(fdv, &st);
+ rc = migrate_set_timestamps(fd_dst, &st);
if (rc < 0) {
error_loc = "set target file timestamp failed";
goto out_unlock;
*
* Pass in gid=0 since we already own grouplock.
*/
- rc = llapi_fswap_layouts_grouplock(fd, fdv, dv1, 0, 0,
+ rc = llapi_fswap_layouts_grouplock(fd_src, fd_dst, dv1, 0, 0,
SWAP_LAYOUTS_CHECK_DV1);
if (rc == -EAGAIN) {
error_loc = "file changed";
}
out_unlock:
- rc2 = llapi_group_unlock(fd, gid);
+ rc2 = llapi_group_unlock(fd_src, gid);
if (rc2 < 0 && rc == 0) {
error_loc = "unlock group lock";
rc = rc2;
return -EBUSY;
}
-static int migrate_nonblock(int fd, int fdv,
+static int migrate_nonblock(int fd_src, int fd_dst,
unsigned long long bandwidth_bytes_sec,
enum stats_flag stats_flag,
long stats_interval_sec)
__u64 dv2;
int rc;
- rc = fstat(fd, &st);
+ rc = fstat(fd_src, &st);
if (rc < 0) {
error_loc = "cannot stat source file";
return -errno;
}
- rc = llapi_get_data_version(fd, &dv1, LL_DV_RD_FLUSH);
+ rc = llapi_get_data_version(fd_src, &dv1, LL_DV_RD_FLUSH);
if (rc < 0) {
error_loc = "cannot get data version";
return rc;
}
- rc = migrate_copy_data(fd, fdv, check_lease, bandwidth_bytes_sec,
- stats_flag, stats_interval_sec,
- st.st_size);
+ rc = migrate_copy_data(fd_src, fd_dst, check_lease,
+ bandwidth_bytes_sec, stats_flag,
+ stats_interval_sec, st.st_size);
if (rc < 0) {
error_loc = "data copy failed";
return rc;
}
- rc = llapi_get_data_version(fd, &dv2, LL_DV_RD_FLUSH);
+ rc = llapi_get_data_version(fd_src, &dv2, LL_DV_RD_FLUSH);
if (rc != 0) {
error_loc = "cannot get data version";
return rc;
}
/* Make sure we keep original atime/mtime values */
- rc = migrate_set_timestamps(fdv, &st);
+ rc = migrate_set_timestamps(fd_dst, &st);
if (rc < 0) {
error_loc = "set target file timestamp failed";
return -errno;
{
struct llapi_layout *existing;
uint64_t dom_new, dom_cur;
- int fd = -1;
- int fdv = -1;
+ int fd_src = -1;
+ int fd_dst = -1;
int rc;
rc = migrate_open_files(name, migration_flags, param, layout,
- &fd, &fdv);
+ &fd_src, &fd_dst);
if (rc < 0)
goto out;
goto out;
}
/* special case for migration to DOM layout*/
- existing = llapi_layout_get_by_fd(fd, 0);
+ existing = llapi_layout_get_by_fd(fd_src, 0);
if (!existing) {
error_loc = "cannot get existing layout";
goto out;
* if new layout used bigger DOM size, then mirroring is used
*/
if (dom_new > dom_cur) {
- rc = lfs_migrate_to_dom(fd, fdv, name, migration_flags,
+ rc = lfs_migrate_to_dom(fd_src, fd_dst, name, migration_flags,
bandwidth_bytes_sec, stats_flag,
stats_interval_sec);
if (rc)
* between a broken lease and a server that does not support
* atomic swap/close (LU-6785)
*/
- rc = migrate_block(fd, fdv, bandwidth_bytes_sec, stats_flag,
- stats_interval_sec);
+ rc = migrate_block(fd_src, fd_dst, bandwidth_bytes_sec,
+ stats_flag, stats_interval_sec);
goto out;
}
- rc = llapi_lease_acquire(fd, LL_LEASE_RDLCK);
+ rc = llapi_lease_acquire(fd_src, LL_LEASE_RDLCK);
if (rc < 0) {
error_loc = "cannot get lease";
goto out;
}
- rc = migrate_nonblock(fd, fdv, bandwidth_bytes_sec, stats_flag,
+ rc = migrate_nonblock(fd_src, fd_dst, bandwidth_bytes_sec, stats_flag,
stats_interval_sec);
if (rc < 0) {
- llapi_lease_release(fd);
+ llapi_lease_release(fd_src);
goto out;
}
* for a migration we need to check data version on file did
* not change.
*/
- rc = llapi_fswap_layouts(fd, fdv, 0, 0, SWAP_LAYOUTS_CLOSE);
+ rc = llapi_fswap_layouts(fd_src, fd_dst, 0, 0, SWAP_LAYOUTS_CLOSE);
if (rc < 0) {
error_loc = "cannot swap layout";
goto out;
}
out:
- if (fd >= 0)
- close(fd);
+ if (fd_src >= 0)
+ close(fd_src);
- if (fdv >= 0)
- close(fdv);
+ if (fd_dst >= 0)
+ close(fd_dst);
out_closed:
if (rc < 0)
fprintf(stderr, "error: %s: %s: %s: %s\n",
*
* \retval bytes number of bytes are the same
*/
-static ssize_t mirror_file_compare(int fd, int fdv)
+static ssize_t mirror_file_compare(int fd_src, int fd_dst)
{
const size_t buflen = 4 * 1024 * 1024; /* 4M */
void *buf;
return -ENOMEM;
while (1) {
- if (!llapi_lease_check(fd)) {
+ if (!llapi_lease_check(fd_src)) {
bytes_done = -EBUSY;
break;
}
- bytes_read = read(fd, buf, buflen);
+ bytes_read = read(fd_src, buf, buflen);
if (bytes_read <= 0)
break;
- if (bytes_read != read(fdv, buf + buflen, buflen))
+ if (bytes_read != read(fd_dst, buf + buflen, buflen))
break;
/*
struct llapi_layout *f_layout = NULL;
struct ll_ioc_lease *data = NULL;
struct stat st;
- int fd = -1;
- int fdv = -1;
+ int fd_src = -1;
+ int fd_dst = -1;
int rc = 0;
if (inherit) {
llapi_layout_comp_flags_set(m_layout, flags);
rc = migrate_open_files(name,
LLAPI_MIGRATION_NONDIRECT | LLAPI_MIGRATION_MIRROR,
- NULL, m_layout, &fd, &fdv);
+ NULL, m_layout, &fd_src, &fd_dst);
if (rc < 0)
goto out;
- rc = llapi_lease_acquire(fd, LL_LEASE_RDLCK);
+ rc = llapi_lease_acquire(fd_src, LL_LEASE_RDLCK);
if (rc < 0) {
error_loc = "cannot get lease";
goto out;
}
- rc = fstat(fd, &st);
+ rc = fstat(fd_src, &st);
if (rc < 0) {
error_loc = "cannot stat source file";
goto out;
if (stats_flag)
printf("%s:\n", name);
- rc = migrate_nonblock(fd, fdv, bandwidth_bytes_sec, stats_flag,
+ rc = migrate_nonblock(fd_src, fd_dst, bandwidth_bytes_sec, stats_flag,
stats_interval_sec);
if (rc < 0) {
- llapi_lease_release(fd);
+ llapi_lease_release(fd_src);
goto out;
}
- rc = migrate_set_timestamps(fd, &st);
+ rc = migrate_set_timestamps(fd_src, &st);
if (rc < 0) {
error_loc = "cannot set source file timestamp";
goto out;
data->lil_mode = LL_LEASE_UNLCK;
data->lil_flags = LL_LEASE_LAYOUT_MERGE;
data->lil_count = 1;
- data->lil_ids[0] = fdv;
- rc = llapi_lease_set(fd, data);
+ data->lil_ids[0] = fd_dst;
+ rc = llapi_lease_set(fd_src, data);
if (rc < 0) {
error_loc = "cannot merge layout";
goto out;
out:
if (data)
free(data);
- if (fd >= 0)
- close(fd);
- if (fdv >= 0)
- close(fdv);
+ if (fd_src >= 0)
+ close(fd_src);
+ if (fd_dst >= 0)
+ close(fd_dst);
if (rc < 0)
fprintf(stderr, "error: %s: %s: %s: %s\n",
progname, name, error_loc, strerror(-rc));
int lfs_mirror_resync_file(const char *fname, struct ll_ioc_lease *ioc,
__u16 *mirror_ids, int ids_nr);
-static int lfs_migrate_to_dom(int fd, int fdv, char *name,
+static int lfs_migrate_to_dom(int fd_src, int fd_dst, char *name,
__u64 migration_flags,
unsigned long long bandwidth_bytes_sec,
enum stats_flag stats_flag,
struct ll_ioc_lease *data = NULL;
int rc;
- rc = llapi_lease_acquire(fd, LL_LEASE_RDLCK);
+ rc = llapi_lease_acquire(fd_src, LL_LEASE_RDLCK);
if (rc < 0) {
error_loc = "cannot get lease";
goto out_close;
if (stats_flag)
printf("%s:\n", name);
- rc = migrate_nonblock(fd, fdv, bandwidth_bytes_sec, stats_flag,
+ rc = migrate_nonblock(fd_src, fd_dst, bandwidth_bytes_sec, stats_flag,
stats_interval_sec);
if (rc < 0)
goto out_release;
data->lil_mode = LL_LEASE_UNLCK;
data->lil_flags = LL_LEASE_LAYOUT_MERGE;
data->lil_count = 1;
- data->lil_ids[0] = fdv;
- rc = llapi_lease_set(fd, data);
+ data->lil_ids[0] = fd_dst;
+ rc = llapi_lease_set(fd_src, data);
if (rc < 0) {
error_loc = "cannot merge layout";
goto out_close;
error_loc = "lost lease lock";
goto out_close;
}
- close(fd);
- close(fdv);
+ close(fd_src);
+ close(fd_dst);
rc = lfs_mirror_resync_file(name, data, NULL, 0);
if (rc) {
goto out;
out_release:
- llapi_lease_release(fd);
+ llapi_lease_release(fd_src);
out_close:
- close(fd);
- close(fdv);
+ close(fd_src);
+ close(fd_dst);
out:
if (rc < 0)
fprintf(stderr, "error: %s: %s: %s: %s\n",