Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3469ac1a authored by Sage Weil's avatar Sage Weil
Browse files

ceph: drop support for preferred_osd pgs



This was an ill-conceived feature that has been removed from Ceph.  Do
this gracefully:

 - reject attempts to specify a preferred_osd via the ioctl
 - stop exposing this information via virtual xattrs
 - always fill in -1 for requests, in case we talk to an older server
 - don't calculate preferred_osd placements/pgids

Reviewed-by: default avatarAlex Elder <elder@inktank.com>
Signed-off-by: default avatarSage Weil <sage@inktank.com>
parent cd9d9f5d
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -935,7 +935,6 @@ static int rbd_do_request(struct request *rq,
	layout->fl_stripe_unit = cpu_to_le32(1 << RBD_MAX_OBJ_ORDER);
	layout->fl_stripe_unit = cpu_to_le32(1 << RBD_MAX_OBJ_ORDER);
	layout->fl_stripe_count = cpu_to_le32(1);
	layout->fl_stripe_count = cpu_to_le32(1);
	layout->fl_object_size = cpu_to_le32(1 << RBD_MAX_OBJ_ORDER);
	layout->fl_object_size = cpu_to_le32(1 << RBD_MAX_OBJ_ORDER);
	layout->fl_pg_preferred = cpu_to_le32(-1);
	layout->fl_pg_pool = cpu_to_le32(dev->poolid);
	layout->fl_pg_pool = cpu_to_le32(dev->poolid);
	ceph_calc_raw_layout(osdc, layout, snapid, ofs, &len, &bno,
	ceph_calc_raw_layout(osdc, layout, snapid, ofs, &len, &bno,
				req, ops);
				req, ops);
+0 −1
Original line number Original line Diff line number Diff line
@@ -54,7 +54,6 @@ prepare_open_request(struct super_block *sb, int flags, int create_mode)
	req->r_fmode = ceph_flags_to_mode(flags);
	req->r_fmode = ceph_flags_to_mode(flags);
	req->r_args.open.flags = cpu_to_le32(flags);
	req->r_args.open.flags = cpu_to_le32(flags);
	req->r_args.open.mode = cpu_to_le32(create_mode);
	req->r_args.open.mode = cpu_to_le32(create_mode);
	req->r_args.open.preferred = cpu_to_le32(-1);
out:
out:
	return req;
	return req;
}
}
+5 −10
Original line number Original line Diff line number Diff line
@@ -26,8 +26,7 @@ static long ceph_ioctl_get_layout(struct file *file, void __user *arg)
		l.stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
		l.stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
		l.object_size = ceph_file_layout_object_size(ci->i_layout);
		l.object_size = ceph_file_layout_object_size(ci->i_layout);
		l.data_pool = le32_to_cpu(ci->i_layout.fl_pg_pool);
		l.data_pool = le32_to_cpu(ci->i_layout.fl_pg_pool);
		l.preferred_osd =
		l.preferred_osd = (s32)-1;
			(s32)le32_to_cpu(ci->i_layout.fl_pg_preferred);
		if (copy_to_user(arg, &l, sizeof(l)))
		if (copy_to_user(arg, &l, sizeof(l)))
			return -EFAULT;
			return -EFAULT;
	}
	}
@@ -49,6 +48,10 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
	if (copy_from_user(&l, arg, sizeof(l)))
	if (copy_from_user(&l, arg, sizeof(l)))
		return -EFAULT;
		return -EFAULT;


	/* preferred_osd is no longer supported */
	if (l.preferred_osd != -1)
		return -EINVAL;

	/* validate changed params against current layout */
	/* validate changed params against current layout */
	err = ceph_do_getattr(file->f_dentry->d_inode, CEPH_STAT_CAP_LAYOUT);
	err = ceph_do_getattr(file->f_dentry->d_inode, CEPH_STAT_CAP_LAYOUT);
	if (!err) {
	if (!err) {
@@ -56,8 +59,6 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
		nl.stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
		nl.stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
		nl.object_size = ceph_file_layout_object_size(ci->i_layout);
		nl.object_size = ceph_file_layout_object_size(ci->i_layout);
		nl.data_pool = le32_to_cpu(ci->i_layout.fl_pg_pool);
		nl.data_pool = le32_to_cpu(ci->i_layout.fl_pg_pool);
		nl.preferred_osd =
				(s32)le32_to_cpu(ci->i_layout.fl_pg_preferred);
	} else
	} else
		return err;
		return err;


@@ -69,8 +70,6 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
		nl.object_size = l.object_size;
		nl.object_size = l.object_size;
	if (l.data_pool)
	if (l.data_pool)
		nl.data_pool = l.data_pool;
		nl.data_pool = l.data_pool;
	if (l.preferred_osd)
		nl.preferred_osd = l.preferred_osd;


	if ((nl.object_size & ~PAGE_MASK) ||
	if ((nl.object_size & ~PAGE_MASK) ||
	    (nl.stripe_unit & ~PAGE_MASK) ||
	    (nl.stripe_unit & ~PAGE_MASK) ||
@@ -106,8 +105,6 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
	req->r_args.setlayout.layout.fl_object_size =
	req->r_args.setlayout.layout.fl_object_size =
		cpu_to_le32(l.object_size);
		cpu_to_le32(l.object_size);
	req->r_args.setlayout.layout.fl_pg_pool = cpu_to_le32(l.data_pool);
	req->r_args.setlayout.layout.fl_pg_pool = cpu_to_le32(l.data_pool);
	req->r_args.setlayout.layout.fl_pg_preferred =
		cpu_to_le32(l.preferred_osd);


	parent_inode = ceph_get_dentry_parent_inode(file->f_dentry);
	parent_inode = ceph_get_dentry_parent_inode(file->f_dentry);
	err = ceph_mdsc_do_request(mdsc, parent_inode, req);
	err = ceph_mdsc_do_request(mdsc, parent_inode, req);
@@ -171,8 +168,6 @@ static long ceph_ioctl_set_layout_policy (struct file *file, void __user *arg)
			cpu_to_le32(l.object_size);
			cpu_to_le32(l.object_size);
	req->r_args.setlayout.layout.fl_pg_pool =
	req->r_args.setlayout.layout.fl_pg_pool =
			cpu_to_le32(l.data_pool);
			cpu_to_le32(l.data_pool);
	req->r_args.setlayout.layout.fl_pg_preferred =
			cpu_to_le32(l.preferred_osd);


	err = ceph_mdsc_do_request(mdsc, inode, req);
	err = ceph_mdsc_do_request(mdsc, inode, req);
	ceph_mdsc_put_request(req);
	ceph_mdsc_put_request(req);
+0 −9
Original line number Original line Diff line number Diff line
@@ -118,15 +118,6 @@ static size_t ceph_vxattrcb_file_layout(struct ceph_inode_info *ci, char *val,
		(unsigned long long)ceph_file_layout_su(ci->i_layout),
		(unsigned long long)ceph_file_layout_su(ci->i_layout),
		(unsigned long long)ceph_file_layout_stripe_count(ci->i_layout),
		(unsigned long long)ceph_file_layout_stripe_count(ci->i_layout),
		(unsigned long long)ceph_file_layout_object_size(ci->i_layout));
		(unsigned long long)ceph_file_layout_object_size(ci->i_layout));

	if (ceph_file_layout_pg_preferred(ci->i_layout) >= 0) {
		val += ret;
		size -= ret;
		ret += snprintf(val, size, "preferred_osd=%lld\n",
			    (unsigned long long)ceph_file_layout_pg_preferred(
				    ci->i_layout));
	}

	return ret;
	return ret;
}
}


+2 −2
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ struct ceph_file_layout {
	__le32 fl_object_stripe_unit;  /* UNUSED.  for per-object parity, if any */
	__le32 fl_object_stripe_unit;  /* UNUSED.  for per-object parity, if any */


	/* object -> pg layout */
	/* object -> pg layout */
	__le32 fl_pg_preferred; /* preferred primary for pg (-1 for none) */
	__le32 fl_unused;       /* unused; used to be preferred primary (-1) */
	__le32 fl_pg_pool;      /* namespace, crush ruleset, rep level */
	__le32 fl_pg_pool;      /* namespace, crush ruleset, rep level */
} __attribute__ ((packed));
} __attribute__ ((packed));


@@ -384,7 +384,7 @@ union ceph_mds_request_args {
		__le32 stripe_count;         /* ... */
		__le32 stripe_count;         /* ... */
		__le32 object_size;
		__le32 object_size;
		__le32 file_replication;
		__le32 file_replication;
		__le32 preferred;
		__le32 unused;               /* used to be preferred osd */
	} __attribute__ ((packed)) open;
	} __attribute__ ((packed)) open;
	struct {
	struct {
		__le32 flags;
		__le32 flags;
Loading