All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kurz <groug@kaod.org>
To: Christian Schoenebeck <qemu_oss@crudebyte.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [PATCH v4 3/7] tests/9pfs: compare QIDs in fs_walk_none() test
Date: Wed, 15 Jun 2022 17:08:05 +0200	[thread overview]
Message-ID: <20220615170805.1dca73a9@bahia> (raw)
In-Reply-To: <5bbe9c6931b4600a9a23742f5ff2d38c1188237d.1647339025.git.qemu_oss@crudebyte.com>

On Tue, 15 Mar 2022 11:08:35 +0100
Christian Schoenebeck <qemu_oss@crudebyte.com> wrote:

> Extend previously added fs_walk_none() test by comparing the QID
> of the root fid with the QID of the cloned fid. They should be
> equal.
> 
> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
> ---

LGTM.

Reviewed-by: Greg Kurz <groug@kaod.org>

>  tests/qtest/virtio-9p-test.c | 87 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 87 insertions(+)
> 
> diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c
> index 6c00da03f4..a1160f4659 100644
> --- a/tests/qtest/virtio-9p-test.c
> +++ b/tests/qtest/virtio-9p-test.c
> @@ -371,8 +371,15 @@ static P9Req *v9fs_tattach(QVirtio9P *v9p, uint32_t fid, uint32_t n_uname,
>      return req;
>  }
>  
> +/* type[1] version[4] path[8] */
>  typedef char v9fs_qid[13];
>  
> +static inline bool is_same_qid(v9fs_qid a, v9fs_qid b)
> +{
> +    /* don't compare QID version for checking for file ID equalness */
> +    return a[0] == b[0] && memcmp(&a[5], &b[5], 8) == 0;
> +}
> +
>  /* size[4] Rattach tag[2] qid[13] */
>  static void v9fs_rattach(P9Req *req, v9fs_qid *qid)
>  {
> @@ -425,6 +432,79 @@ static void v9fs_rwalk(P9Req *req, uint16_t *nwqid, v9fs_qid **wqid)
>      v9fs_req_free(req);
>  }
>  
> +/* size[4] Tgetattr tag[2] fid[4] request_mask[8] */
> +static P9Req *v9fs_tgetattr(QVirtio9P *v9p, uint32_t fid, uint64_t request_mask,
> +                            uint16_t tag)
> +{
> +    P9Req *req;
> +
> +    req = v9fs_req_init(v9p, 4 + 8, P9_TGETATTR, tag);
> +    v9fs_uint32_write(req, fid);
> +    v9fs_uint64_write(req, request_mask);
> +    v9fs_req_send(req);
> +    return req;
> +}
> +
> +typedef struct v9fs_attr {
> +    uint64_t valid;
> +    v9fs_qid qid;
> +    uint32_t mode;
> +    uint32_t uid;
> +    uint32_t gid;
> +    uint64_t nlink;
> +    uint64_t rdev;
> +    uint64_t size;
> +    uint64_t blksize;
> +    uint64_t blocks;
> +    uint64_t atime_sec;
> +    uint64_t atime_nsec;
> +    uint64_t mtime_sec;
> +    uint64_t mtime_nsec;
> +    uint64_t ctime_sec;
> +    uint64_t ctime_nsec;
> +    uint64_t btime_sec;
> +    uint64_t btime_nsec;
> +    uint64_t gen;
> +    uint64_t data_version;
> +} v9fs_attr;
> +
> +#define P9_GETATTR_BASIC    0x000007ffULL /* Mask for fields up to BLOCKS */
> +
> +/*
> + * size[4] Rgetattr tag[2] valid[8] qid[13] mode[4] uid[4] gid[4] nlink[8]
> + *                  rdev[8] size[8] blksize[8] blocks[8]
> + *                  atime_sec[8] atime_nsec[8] mtime_sec[8] mtime_nsec[8]
> + *                  ctime_sec[8] ctime_nsec[8] btime_sec[8] btime_nsec[8]
> + *                  gen[8] data_version[8]
> + */
> +static void v9fs_rgetattr(P9Req *req, v9fs_attr *attr)
> +{
> +    v9fs_req_recv(req, P9_RGETATTR);
> +
> +    v9fs_uint64_read(req, &attr->valid);
> +    v9fs_memread(req, &attr->qid, 13);
> +    v9fs_uint32_read(req, &attr->mode);
> +    v9fs_uint32_read(req, &attr->uid);
> +    v9fs_uint32_read(req, &attr->gid);
> +    v9fs_uint64_read(req, &attr->nlink);
> +    v9fs_uint64_read(req, &attr->rdev);
> +    v9fs_uint64_read(req, &attr->size);
> +    v9fs_uint64_read(req, &attr->blksize);
> +    v9fs_uint64_read(req, &attr->blocks);
> +    v9fs_uint64_read(req, &attr->atime_sec);
> +    v9fs_uint64_read(req, &attr->atime_nsec);
> +    v9fs_uint64_read(req, &attr->mtime_sec);
> +    v9fs_uint64_read(req, &attr->mtime_nsec);
> +    v9fs_uint64_read(req, &attr->ctime_sec);
> +    v9fs_uint64_read(req, &attr->ctime_nsec);
> +    v9fs_uint64_read(req, &attr->btime_sec);
> +    v9fs_uint64_read(req, &attr->btime_nsec);
> +    v9fs_uint64_read(req, &attr->gen);
> +    v9fs_uint64_read(req, &attr->data_version);
> +
> +    v9fs_req_free(req);
> +}
> +
>  /* size[4] Treaddir tag[2] fid[4] offset[8] count[4] */
>  static P9Req *v9fs_treaddir(QVirtio9P *v9p, uint32_t fid, uint64_t offset,
>                              uint32_t count, uint16_t tag)
> @@ -1009,6 +1089,7 @@ static void fs_walk_none(void *obj, void *data, QGuestAllocator *t_alloc)
>      v9fs_qid root_qid;
>      g_autofree v9fs_qid *wqid = NULL;
>      P9Req *req;
> +    struct v9fs_attr attr;
>  
>      do_version(v9p);
>      req = v9fs_tattach(v9p, 0, getuid(), 0);
> @@ -1021,6 +1102,12 @@ static void fs_walk_none(void *obj, void *data, QGuestAllocator *t_alloc)
>  
>      /* special case: no QID is returned if nwname=0 was sent */
>      g_assert(wqid == NULL);
> +
> +    req = v9fs_tgetattr(v9p, 1, P9_GETATTR_BASIC, 0);
> +    v9fs_req_wait_for_reply(req, NULL);
> +    v9fs_rgetattr(req, &attr);
> +
> +    g_assert(is_same_qid(root_qid, attr.qid));
>  }
>  
>  static void fs_walk_dotdot(void *obj, void *data, QGuestAllocator *t_alloc)



  reply	other threads:[~2022-06-15 15:41 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-15 10:10 [PATCH v4 0/7] 9pfs: fix 'Twalk' protocol violation Christian Schoenebeck
2022-03-15 10:08 ` [PATCH v4 1/7] tests/9pfs: walk to non-existent dir Christian Schoenebeck
2022-03-15 10:08 ` [PATCH v4 2/7] tests/9pfs: Twalk with nwname=0 Christian Schoenebeck
2022-03-15 10:08 ` [PATCH v4 3/7] tests/9pfs: compare QIDs in fs_walk_none() test Christian Schoenebeck
2022-06-15 15:08   ` Greg Kurz [this message]
2022-03-15 10:08 ` [PATCH v4 4/7] 9pfs: refactor 'name_idx' -> 'nwalked' in v9fs_walk() Christian Schoenebeck
2022-03-15 10:08 ` [PATCH v4 5/7] 9pfs: fix 'Twalk' to only send error if no component walked Christian Schoenebeck
2022-06-15 15:52   ` Greg Kurz
2022-06-15 16:36     ` Christian Schoenebeck
2022-06-16 10:17       ` Greg Kurz
2022-03-15 10:08 ` [PATCH v4 6/7] tests/9pfs: guard recent 'Twalk' behaviour fix Christian Schoenebeck
2022-03-15 10:08 ` [PATCH v4 7/7] tests/9pfs: check fid being unaffected in fs_walk_2nd_nonexistent Christian Schoenebeck
2022-06-15 15:57   ` Greg Kurz
2022-03-29 10:21 ` [PATCH v4 0/7] 9pfs: fix 'Twalk' protocol violation Christian Schoenebeck
2022-03-29 10:59   ` Greg Kurz
2022-06-16 10:53 ` Christian Schoenebeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220615170805.1dca73a9@bahia \
    --to=groug@kaod.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.