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