Re: [PATCH 03/32] libceph, ceph: change ceph_calc_file_object_mapping() signature

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/16/2018 07:37 AM, Alex Elder wrote:
> From: Ilya Dryomov <idryomov@xxxxxxxxx>
> 
> - make it void
> - xlen (object extent length) out parameter should be u32 because only
>   a single stripe unit is mapped at a time
> 
> Signed-off-by: Ilya Dryomov <idryomov@xxxxxxxxx>

Looks good.

Reviewed-by: Alex Elder <elder@xxxxxxxxxx>

> ---
>  fs/ceph/addr.c              | 16 ++++++----------
>  fs/ceph/ioctl.c             | 11 +++--------
>  include/linux/ceph/osdmap.h |  7 +++----
>  net/ceph/osd_client.c       | 10 ++++------
>  net/ceph/osdmap.c           |  6 ++----
>  5 files changed, 18 insertions(+), 32 deletions(-)
> 
> diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
> index b4336b42ce3b..c0fe1b6f47ac 100644
> --- a/fs/ceph/addr.c
> +++ b/fs/ceph/addr.c
> @@ -945,19 +945,15 @@ static int ceph_writepages_start(struct address_space *mapping,
>  			if (locked_pages == 0) {
>  				u64 objnum;
>  				u64 objoff;
> +				u32 xlen;
>  
>  				/* prepare async write request */
>  				offset = (u64)page_offset(page);
> -				len = wsize;
> -
> -				rc = ceph_calc_file_object_mapping(&ci->i_layout,
> -								offset, len,
> -								&objnum, &objoff,
> -								&len);
> -				if (rc < 0) {
> -					unlock_page(page);
> -					break;
> -				}
> +				ceph_calc_file_object_mapping(&ci->i_layout,
> +							      offset, wsize,
> +							      &objnum, &objoff,
> +							      &xlen);
> +				len = xlen;
>  
>  				num_ops = 1;
>  				strip_unit_end = page->index +
> diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c
> index 851aa69ec8f0..b855d24a895a 100644
> --- a/fs/ceph/ioctl.c
> +++ b/fs/ceph/ioctl.c
> @@ -185,7 +185,7 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
>  		&ceph_sb_to_client(inode->i_sb)->client->osdc;
>  	struct ceph_object_locator oloc;
>  	CEPH_DEFINE_OID_ONSTACK(oid);
> -	u64 len = 1, olen;
> +	u32 xlen;
>  	u64 tmp;
>  	struct ceph_pg pgid;
>  	int r;
> @@ -195,13 +195,8 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
>  		return -EFAULT;
>  
>  	down_read(&osdc->lock);
> -	r = ceph_calc_file_object_mapping(&ci->i_layout, dl.file_offset, len,
> -					  &dl.object_no, &dl.object_offset,
> -					  &olen);
> -	if (r < 0) {
> -		up_read(&osdc->lock);
> -		return -EIO;
> -	}
> +	ceph_calc_file_object_mapping(&ci->i_layout, dl.file_offset, 1,
> +				      &dl.object_no, &dl.object_offset, &xlen);
>  	dl.file_offset -= dl.object_offset;
>  	dl.object_size = ci->i_layout.object_size;
>  	dl.block_size = ci->i_layout.stripe_unit;
> diff --git a/include/linux/ceph/osdmap.h b/include/linux/ceph/osdmap.h
> index d41fad99c0fa..92314035dac1 100644
> --- a/include/linux/ceph/osdmap.h
> +++ b/include/linux/ceph/osdmap.h
> @@ -280,10 +280,9 @@ bool ceph_osds_changed(const struct ceph_osds *old_acting,
>  		       const struct ceph_osds *new_acting,
>  		       bool any_change);
>  
> -/* calculate mapping of a file extent to an object */
> -extern int ceph_calc_file_object_mapping(struct ceph_file_layout *layout,
> -					 u64 off, u64 len,
> -					 u64 *bno, u64 *oxoff, u64 *oxlen);
> +void ceph_calc_file_object_mapping(struct ceph_file_layout *l,
> +				   u64 off, u64 len,
> +				   u64 *objno, u64 *objoff, u32 *xlen);
>  
>  int __ceph_object_locator_to_pg(struct ceph_pg_pool_info *pi,
>  				const struct ceph_object_id *oid,
> diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
> index 2814dba5902d..4b0485458d26 100644
> --- a/net/ceph/osd_client.c
> +++ b/net/ceph/osd_client.c
> @@ -103,13 +103,12 @@ static int calc_layout(struct ceph_file_layout *layout, u64 off, u64 *plen,
>  			u64 *objnum, u64 *objoff, u64 *objlen)
>  {
>  	u64 orig_len = *plen;
> -	int r;
> +	u32 xlen;
>  
>  	/* object extent? */
> -	r = ceph_calc_file_object_mapping(layout, off, orig_len, objnum,
> -					  objoff, objlen);
> -	if (r < 0)
> -		return r;
> +	ceph_calc_file_object_mapping(layout, off, orig_len, objnum,
> +					  objoff, &xlen);
> +	*objlen = xlen;
>  	if (*objlen < orig_len) {
>  		*plen = *objlen;
>  		dout(" skipping last %llu, final file extent %llu~%llu\n",
> @@ -117,7 +116,6 @@ static int calc_layout(struct ceph_file_layout *layout, u64 off, u64 *plen,
>  	}
>  
>  	dout("calc_layout objnum=%llx %llu~%llu\n", *objnum, *objoff, *objlen);
> -
>  	return 0;
>  }
>  
> diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
> index 6c1cd4e2f7a7..b9c4a465dcf2 100644
> --- a/net/ceph/osdmap.c
> +++ b/net/ceph/osdmap.c
> @@ -2153,9 +2153,9 @@ bool ceph_osds_changed(const struct ceph_osds *old_acting,
>   * objno     |      0      |      1      |      2      |      3      |      4
>   * objsetno  |                    0                    |                    1
>   */
> -int ceph_calc_file_object_mapping(struct ceph_file_layout *l,
> +void ceph_calc_file_object_mapping(struct ceph_file_layout *l,
>  				   u64 off, u64 len,
> -				   u64 *objno, u64 *objoff, u64 *xlen)
> +				   u64 *objno, u64 *objoff, u32 *xlen)
>  {
>  	u32 stripes_per_object = l->object_size / l->stripe_unit;
>  	u64 blockno;	/* which su */
> @@ -2173,8 +2173,6 @@ int ceph_calc_file_object_mapping(struct ceph_file_layout *l,
>  	*objno = objsetno * l->stripe_count + stripepos;
>  	*objoff = objsetpos * l->stripe_unit + blockoff;
>  	*xlen = min_t(u64, len, l->stripe_unit - blockoff);
> -
> -	return 0;
>  }
>  EXPORT_SYMBOL(ceph_calc_file_object_mapping);
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux