On Mon, 5 Aug 2013, majianpeng wrote:
> As the 'ceph help' print, it will print pgs.But now it can't.
> So we add this.There are two type name of pg, temp and stable.
> Because the command 'ceph pg dump' print temp name,so we also print the
> temp name of pg.

Unfortunately we can't modify the ioctl structure like this without 
breaking the kernel/userspace ABI (a big no-no).  The usual way around 
that is to make a new ioctl (like CEPH_IOC_GET_DATALOC2) and a new 
structure (struct ceph_ioctl_dataloc2) with the additional fields.

What is this going to be used for?  You can get the full info from the 
montior with the 'ceph osd map <pool name> <object name> --format=json'.  
Does it need to come from the kernel this way?

Assuming we do want to go down this path, I would change a few things:

> 
> Signed-off-by: Jianpeng Ma <[email protected]>
> ---
>  fs/ceph/ioctl.c | 10 +++++++++-
>  fs/ceph/ioctl.h |  1 +
>  2 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c
> index e0b4ef3..1d0f24c 100644
> --- a/fs/ceph/ioctl.c
> +++ b/fs/ceph/ioctl.c
> @@ -209,9 +209,17 @@ 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);
>  
> +     r = ceph_calc_ceph_temp_pg(&pgid, dl.object_name, osdc->osdmap,
> +                                     ceph_file_layout_pg_pool(ci->i_layout));
> +     if (r < 0) {
> +             down_read(&osdc->map_sem);
> +             return r;
> +     }
> +     snprintf(dl.pg_name, sizeof(dl.pg_name), "%llx.%08x",
> +              pgid.pool, pgid.seed);

The pg name formatting is "%lld.%x", if we want this to match with the pg 
names used throughout the rest of the code.  But it sounds like you're 
actually after the raw hash seed, though, in which case I would drop the 
string and instead do

> @@ -58,6 +58,7 @@ struct ceph_ioctl_dataloc {
>       __u64 object_no;             /* out: object # */
>       __u64 object_size;           /* out: object size */
>       char object_name[64];        /* out: object name */
> +     char pg_name[32];            /* out: pg name*/

        __u64 pg_raw_seed;           /* out: placement seed */
        __u64 pg_num;                /* out: pg number */
        __u64 pg_pool;               /* out: pool id */

so that you get the raw value (which e.g. goes in the request) as well as 
which pg that maps to and the pool id.

sage

>       __u64 block_offset;          /* out: offset in block */
>       __u64 block_size;            /* out: block length */
>       __s64 osd;                   /* out: osd # */
> -- 
> 1.8.3.rc1.44.gb387c77
> 
> 
> Thanks!
> Jianpeng 
> MaN????y????b?????v?????{.n??????z??ay????????j???f????????????????:+v??????????zZ+??????"?!?
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to