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

Commit b314a90d authored by Sage Weil's avatar Sage Weil
Browse files

ceph: fix fallocate division



We need to use do_div to divide by a 64-bit value.

Signed-off-by: default avatarSage Weil <sage@inktank.com>
Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
parent ad7a60de
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -960,13 +960,17 @@ static int ceph_zero_objects(struct inode *inode, loff_t offset, loff_t length)
{
	int ret = 0;
	struct ceph_inode_info *ci = ceph_inode(inode);
	__s32 stripe_unit = ceph_file_layout_su(ci->i_layout);
	__s32 stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
	__s32 object_size = ceph_file_layout_object_size(ci->i_layout);
	loff_t object_set_size = (loff_t)object_size * stripe_count;
	s32 stripe_unit = ceph_file_layout_su(ci->i_layout);
	s32 stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
	s32 object_size = ceph_file_layout_object_size(ci->i_layout);
	u64 object_set_size = object_size * stripe_count;
	u64 nearly, t;

	/* round offset up to next period boundary */
	nearly = offset + object_set_size - 1;
	t = nearly;
	nearly -= do_div(t, object_set_size);

	loff_t nearly = (offset + object_set_size - 1)
			/ object_set_size * object_set_size;
	while (length && offset < nearly) {
		loff_t size = length;
		ret = ceph_zero_partial_object(inode, offset, &size);