libceph: calculate placement based on the internal data types
Instead of using the old ceph_object_layout struct, update our internal ceph_calc_object_layout method to use the ceph_pg type. This allows us to pass the full 32-bit precision of the pgid.seed to the callers. It also allows some callers to avoid reaching into the request structures for the struct ceph_object_layout fields. Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Alex Elder <elder@inktank.com>
Bu işleme şunda yer alıyor:
@@ -185,7 +185,6 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
|
||||
&ceph_sb_to_client(inode->i_sb)->client->osdc;
|
||||
u64 len = 1, olen;
|
||||
u64 tmp;
|
||||
struct ceph_object_layout ol;
|
||||
struct ceph_pg pgid;
|
||||
int r;
|
||||
|
||||
@@ -209,11 +208,9 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
|
||||
|
||||
snprintf(dl.object_name, sizeof(dl.object_name), "%llx.%08llx",
|
||||
ceph_ino(inode), dl.object_no);
|
||||
ceph_calc_object_layout(&ol, dl.object_name, &ci->i_layout,
|
||||
ceph_calc_object_layout(&pgid, dl.object_name, &ci->i_layout,
|
||||
osdc->osdmap);
|
||||
|
||||
pgid.pool = le32_to_cpu(ol.ol_pgid.pool);
|
||||
pgid.seed = le16_to_cpu(ol.ol_pgid.ps);
|
||||
dl.osd = ceph_calc_pg_primary(osdc->osdmap, pgid);
|
||||
if (dl.osd >= 0) {
|
||||
struct ceph_entity_addr *a =
|
||||
|
Yeni konuda referans
Bir kullanıcı engelle