From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918616; cv=none; d=zohomail.com; s=zohoarc; b=QTdF168Y/MsKtG7YtZDreigiNIz2esi6k8f0SltgKCRFAxt4NQ4Wy4q7QURvesBH7O3vWITzY56iPAV7zMn5aplzbVpfOPYPG5ppoi4Vj2SrCxJK+Lg20jek9c74ALOQ4e6IF8yGm2p+blCLx0T8DDAixGxK1EjwkyN3jTUpeWY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918616; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=Xx9ZFaI+MNa/ItK1XPYsLLiLRI8ZeKZVEa6K05U9msM=; b=nD65U6qgBWuyrg8oi0imYKe16sgVjRYKLophzja9vJCciL1JFAzEnv0LCHvA8CLxEUbzKZ7R6Ywi32kE1essKcwwXeptY77n+ZkxAUDJdMh5g72Bb8upxYaf+oepzifBH07yvbTo2k7xkUVQc+sk/HYv4cj0SGU3I+NbuOFUmOc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918616778713.7696113495539; Tue, 4 Oct 2022 14:23:36 -0700 (PDT) Received: from localhost ([::1]:35850 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpO3-00017u-Nc for importer@patchew.org; Tue, 04 Oct 2022 17:23:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54310) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <607969dbfbc63c1be008df9131133711b046e979@lizzy.crudebyte.com>) id 1ofpKu-0006DM-4i for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:27 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:45645) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <607969dbfbc63c1be008df9131133711b046e979@lizzy.crudebyte.com>) id 1ofpKp-0002Ht-I7 for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=Xx9ZFaI+MNa/ItK1XPYsLLiLRI8ZeKZVEa6K05U9msM=; b=RWHca cjK3p51MZ8MNccogFQebolli85M2KT5YNCs402X0y8/jL5z84XwKWWlm+cAMzN5l5uFwfrflWT7Sj 0rXC7ozXe9yfm73+6EfTfVSYStknd8MTXPIoKFJmhEc0vSzKSOWMisWsw0x+vtYeyeR8AX7sRnCFd tE4ZUnf37EyuVuSxMHnntrf5D9p/avZcWps3VPMf1ZR6zrOHoyP+dIqb3+/Ur2G17ox4ZYHvrej6D M2bUGhEqDQItb2X6SWHx/DLZ95vXu/0/HCVulgxixC5lca1IlC/6VDHaZ5S2Z46KFtKYU2n4BnQRx /0Umiz35+SI4bZaoWE3Qi4dxV5Z1Q==; Message-Id: <607969dbfbc63c1be008df9131133711b046e979.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:23 +0200 Subject: [PATCH 01/20] tests/9p: merge *walk*() functions To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=607969dbfbc63c1be008df9131133711b046e979@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918617715100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Introduce declarative function calls. There are currently 4 different functions for sending a 9p 'Twalk' request: v9fs_twalk(), do_walk(), do_walk_rqids() and do_walk_expect_error(). They are all doing the same thing, just in a slightly different way and with slightly different function arguments. Merge those 4 functions into a single function by using a struct for function call arguments and use designated initializers when calling this function to turn usage into a declarative approach, which is better readable and easier to maintain. Also move private functions genfid(), split() and split_free() from virtio-9p-test.c to virtio-9p-client.c. Based-on: Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 114 ++++++++++++++-- tests/qtest/libqos/virtio-9p-client.h | 37 ++++- tests/qtest/virtio-9p-test.c | 187 +++++++++----------------- 3 files changed, 198 insertions(+), 140 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index f5c35fd722..a95bbad9c8 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -23,6 +23,65 @@ void v9fs_set_allocator(QGuestAllocator *t_alloc) alloc =3D t_alloc; } =20 +/* + * Used to auto generate new fids. Start with arbitrary high value to avoid + * collision with hard coded fids in basic test code. + */ +static uint32_t fid_generator =3D 1000; + +static uint32_t genfid(void) +{ + return fid_generator++; +} + +/** + * Splits the @a in string by @a delim into individual (non empty) strings + * and outputs them to @a out. The output array @a out is NULL terminated. + * + * Output array @a out must be freed by calling split_free(). + * + * @returns number of individual elements in output array @a out (without = the + * final NULL terminating element) + */ +static int split(const char *in, const char *delim, char ***out) +{ + int n =3D 0, i =3D 0; + char *tmp, *p; + + tmp =3D g_strdup(in); + for (p =3D strtok(tmp, delim); p !=3D NULL; p =3D strtok(NULL, delim))= { + if (strlen(p) > 0) { + ++n; + } + } + g_free(tmp); + + *out =3D g_new0(char *, n + 1); /* last element NULL delimiter */ + + tmp =3D g_strdup(in); + for (p =3D strtok(tmp, delim); p !=3D NULL; p =3D strtok(NULL, delim))= { + if (strlen(p) > 0) { + (*out)[i++] =3D g_strdup(p); + } + } + g_free(tmp); + + return n; +} + +static void split_free(char ***out) +{ + int i; + if (!*out) { + return; + } + for (i =3D 0; (*out)[i]; ++i) { + g_free((*out)[i]); + } + g_free(*out); + *out =3D NULL; +} + void v9fs_memwrite(P9Req *req, const void *addr, size_t len) { qtest_memwrite(req->qts, req->t_msg + req->t_off, addr, len); @@ -294,28 +353,61 @@ void v9fs_rattach(P9Req *req, v9fs_qid *qid) } =20 /* size[4] Twalk tag[2] fid[4] newfid[4] nwname[2] nwname*(wname[s]) */ -P9Req *v9fs_twalk(QVirtio9P *v9p, uint32_t fid, uint32_t newfid, - uint16_t nwname, char *const wnames[], uint16_t tag) +TWalkRes v9fs_twalk(TWalkOpt opt) { P9Req *req; int i; uint32_t body_size =3D 4 + 4 + 2; + uint32_t err; + char **wnames =3D NULL; =20 - for (i =3D 0; i < nwname; i++) { - uint16_t wname_size =3D v9fs_string_size(wnames[i]); + g_assert(opt.client); + /* expecting either high- or low-level path, both not both */ + g_assert(!opt.path || !(opt.nwname || opt.wnames)); + /* expecting either Rwalk or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !(opt.rwalk.nwqid || opt.rwalk.wqid)); + + if (!opt.newfid) { + opt.newfid =3D genfid(); + } + + if (opt.path) { + opt.nwname =3D split(opt.path, "/", &wnames); + opt.wnames =3D wnames; + } + + for (i =3D 0; i < opt.nwname; i++) { + uint16_t wname_size =3D v9fs_string_size(opt.wnames[i]); =20 g_assert_cmpint(body_size, <=3D, UINT32_MAX - wname_size); body_size +=3D wname_size; } - req =3D v9fs_req_init(v9p, body_size, P9_TWALK, tag); - v9fs_uint32_write(req, fid); - v9fs_uint32_write(req, newfid); - v9fs_uint16_write(req, nwname); - for (i =3D 0; i < nwname; i++) { - v9fs_string_write(req, wnames[i]); + req =3D v9fs_req_init(opt.client, body_size, P9_TWALK, opt.tag); + v9fs_uint32_write(req, opt.fid); + v9fs_uint32_write(req, opt.newfid); + v9fs_uint16_write(req, opt.nwname); + for (i =3D 0; i < opt.nwname; i++) { + v9fs_string_write(req, opt.wnames[i]); } v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rwalk(req, opt.rwalk.nwqid, opt.rwalk.wqid); + } + req =3D NULL; /* request was freed */ + } + + split_free(&wnames); + + return (TWalkRes) { + .newfid =3D opt.newfid, + .req =3D req, + }; } =20 /* size[4] Rwalk tag[2] nwqid[2] nwqid*(wqid[13]) */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index c502d12a66..8c6abbb173 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -72,6 +72,40 @@ struct V9fsDirent { struct V9fsDirent *next; }; =20 +/* options for 'Twalk' 9p request */ +typedef struct TWalkOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* file ID of directory from where walk should start (optional) */ + uint32_t fid; + /* file ID for target directory being walked to (optional) */ + uint32_t newfid; + /* low level variant of path to walk to (optional) */ + uint16_t nwname; + char **wnames; + /* high level variant of path to walk to (optional) */ + const char *path; + /* data being received from 9p server as 'Rwalk' response (optional) */ + struct { + uint16_t *nwqid; + v9fs_qid **wqid; + } rwalk; + /* only send Twalk request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TWalkOpt; + +/* result of 'Twalk' 9p request */ +typedef struct TWalkRes { + /* file ID of target directory been walked to */ + uint32_t newfid; + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TWalkRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -99,8 +133,7 @@ void v9fs_rversion(P9Req *req, uint16_t *len, char **ver= sion); P9Req *v9fs_tattach(QVirtio9P *v9p, uint32_t fid, uint32_t n_uname, uint16_t tag); void v9fs_rattach(P9Req *req, v9fs_qid *qid); -P9Req *v9fs_twalk(QVirtio9P *v9p, uint32_t fid, uint32_t newfid, - uint16_t nwname, char *const wnames[], uint16_t tag); +TWalkRes v9fs_twalk(TWalkOpt opt); void v9fs_rwalk(P9Req *req, uint16_t *nwqid, v9fs_qid **wqid); P9Req *v9fs_tgetattr(QVirtio9P *v9p, uint32_t fid, uint64_t request_mask, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 498c32e21b..cf5d6146ad 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -16,61 +16,7 @@ #include "qemu/module.h" #include "libqos/virtio-9p-client.h" =20 -/* - * Used to auto generate new fids. Start with arbitrary high value to avoid - * collision with hard coded fids in basic test code. - */ -static uint32_t fid_generator =3D 1000; - -static uint32_t genfid(void) -{ - return fid_generator++; -} - -/** - * Splits the @a in string by @a delim into individual (non empty) strings - * and outputs them to @a out. The output array @a out is NULL terminated. - * - * Output array @a out must be freed by calling split_free(). - * - * @returns number of individual elements in output array @a out (without = the - * final NULL terminating element) - */ -static int split(const char *in, const char *delim, char ***out) -{ - int n =3D 0, i =3D 0; - char *tmp, *p; - - tmp =3D g_strdup(in); - for (p =3D strtok(tmp, delim); p !=3D NULL; p =3D strtok(NULL, delim))= { - if (strlen(p) > 0) { - ++n; - } - } - g_free(tmp); - - *out =3D g_new0(char *, n + 1); /* last element NULL delimiter */ - - tmp =3D g_strdup(in); - for (p =3D strtok(tmp, delim); p !=3D NULL; p =3D strtok(NULL, delim))= { - if (strlen(p) > 0) { - (*out)[i++] =3D g_strdup(p); - } - } - g_free(tmp); - - return n; -} - -static void split_free(char ***out) -{ - int i; - for (i =3D 0; (*out)[i]; ++i) { - g_free((*out)[i]); - } - g_free(*out); - *out =3D NULL; -} +#define twalk(...) v9fs_twalk((TWalkOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -109,52 +55,6 @@ static void do_version(QVirtio9P *v9p) g_assert_cmpmem(server_version, server_len, version, strlen(version)); } =20 -/* - * utility function: walk to requested dir and return fid for that dir and - * the QIDs of server response - */ -static uint32_t do_walk_rqids(QVirtio9P *v9p, const char *path, uint16_t *= nwqid, - v9fs_qid **wqid) -{ - char **wnames; - P9Req *req; - const uint32_t fid =3D genfid(); - - int nwnames =3D split(path, "/", &wnames); - - req =3D v9fs_twalk(v9p, 0, fid, nwnames, wnames, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, nwqid, wqid); - - split_free(&wnames); - return fid; -} - -/* utility function: walk to requested dir and return fid for that dir */ -static uint32_t do_walk(QVirtio9P *v9p, const char *path) -{ - return do_walk_rqids(v9p, path, NULL, NULL); -} - -/* utility function: walk to requested dir and expect passed error respons= e */ -static void do_walk_expect_error(QVirtio9P *v9p, const char *path, uint32_= t err) -{ - char **wnames; - P9Req *req; - uint32_t _err; - const uint32_t fid =3D genfid(); - - int nwnames =3D split(path, "/", &wnames); - - req =3D v9fs_twalk(v9p, 0, fid, nwnames, wnames, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlerror(req, &_err); - - g_assert_cmpint(_err, =3D=3D, err); - - split_free(&wnames); -} - static void fs_version(void *obj, void *data, QGuestAllocator *t_alloc) { v9fs_set_allocator(t_alloc); @@ -197,7 +97,10 @@ static void fs_walk(void *obj, void *data, QGuestAlloca= tor *t_alloc) } =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, P9_MAXWELEM, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, + .nwname =3D P9_MAXWELEM, .wnames =3D wnames, .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, &nwqid, &wqid); =20 @@ -223,7 +126,7 @@ static void fs_readdir(void *obj, void *data, QGuestAll= ocator *t_alloc) { QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); - char *const wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_READDIR_DIR) }; + char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_READDIR_DIR) }; uint16_t nqid; v9fs_qid qid; uint32_t count, nentries; @@ -231,7 +134,10 @@ static void fs_readdir(void *obj, void *data, QGuestAl= locator *t_alloc) P9Req *req; =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, + .nwname =3D 1, .wnames =3D wnames, .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, &nqid, NULL); g_assert_cmpint(nqid, =3D=3D, 1); @@ -275,7 +181,7 @@ static void fs_readdir(void *obj, void *data, QGuestAll= ocator *t_alloc) /* readdir test where overall request is split over several messages */ static void do_readdir_split(QVirtio9P *v9p, uint32_t count) { - char *const wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_READDIR_DIR) }; + char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_READDIR_DIR) }; uint16_t nqid; v9fs_qid qid; uint32_t nentries, npartialentries; @@ -292,7 +198,10 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t = count) nentries =3D 0; tail =3D NULL; =20 - req =3D v9fs_twalk(v9p, 0, fid, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D fid, + .nwname =3D 1, .wnames =3D wnames, .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, &nqid, NULL); g_assert_cmpint(nqid, =3D=3D, 1); @@ -356,12 +265,15 @@ static void fs_walk_no_slash(void *obj, void *data, Q= GuestAllocator *t_alloc) { QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); - char *const wnames[] =3D { g_strdup(" /") }; + char *wnames[] =3D { g_strdup(" /") }; P9Req *req; uint32_t err; =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlerror(req, &err); =20 @@ -380,7 +292,7 @@ static void fs_walk_nonexistent(void *obj, void *data, = QGuestAllocator *t_alloc) * The 9p2000 protocol spec says: "If the first element cannot be walk= ed * for any reason, Rerror is returned." */ - do_walk_expect_error(v9p, "non-existent", ENOENT); + twalk({ .client =3D v9p, .path =3D "non-existent", .expectErr =3D ENOE= NT }); } =20 static void fs_walk_2nd_nonexistent(void *obj, void *data, @@ -398,7 +310,10 @@ static void fs_walk_2nd_nonexistent(void *obj, void *d= ata, ); =20 do_attach_rqid(v9p, &root_qid); - fid =3D do_walk_rqids(v9p, path, &nwqid, &wqid); + fid =3D twalk({ + .client =3D v9p, .path =3D path, + .rwalk.nwqid =3D &nwqid, .rwalk.wqid =3D &wqid + }).newfid; /* * The 9p2000 protocol spec says: "nwqid is therefore either nwname or= the * index of the first elementwise walk that failed." @@ -430,7 +345,10 @@ static void fs_walk_none(void *obj, void *data, QGuest= Allocator *t_alloc) v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); =20 - req =3D v9fs_twalk(v9p, 0, 1, 0, NULL, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 0, .wnames= =3D NULL, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, NULL, &wqid); =20 @@ -448,7 +366,7 @@ static void fs_walk_dotdot(void *obj, void *data, QGues= tAllocator *t_alloc) { QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); - char *const wnames[] =3D { g_strdup("..") }; + char *wnames[] =3D { g_strdup("..") }; v9fs_qid root_qid; g_autofree v9fs_qid *wqid =3D NULL; P9Req *req; @@ -458,7 +376,10 @@ static void fs_walk_dotdot(void *obj, void *data, QGue= stAllocator *t_alloc) v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); =20 - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, NULL, &wqid); /* We now we'll get one qid */ =20 @@ -471,11 +392,14 @@ static void fs_lopen(void *obj, void *data, QGuestAll= ocator *t_alloc) { QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); - char *const wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_LOPEN_FILE) }; + char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_LOPEN_FILE) }; P9Req *req; =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, NULL, NULL); =20 @@ -491,13 +415,16 @@ static void fs_write(void *obj, void *data, QGuestAll= ocator *t_alloc) QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); static const uint32_t write_count =3D P9_MAX_SIZE / 2; - char *const wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_WRITE_FILE) }; + char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_WRITE_FILE) }; g_autofree char *buf =3D g_malloc0(write_count); uint32_t count; P9Req *req; =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, NULL, NULL); =20 @@ -517,13 +444,16 @@ static void fs_flush_success(void *obj, void *data, Q= GuestAllocator *t_alloc) { QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); - char *const wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_FLUSH_FILE) }; + char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_FLUSH_FILE) }; P9Req *req, *flush_req; uint32_t reply_len; uint8_t should_block; =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, NULL, NULL); =20 @@ -554,13 +484,16 @@ static void fs_flush_ignored(void *obj, void *data, Q= GuestAllocator *t_alloc) { QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); - char *const wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_FLUSH_FILE) }; + char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_FLUSH_FILE) }; P9Req *req, *flush_req; uint32_t count; uint8_t should_block; =20 do_attach(v9p); - req =3D v9fs_twalk(v9p, 0, 1, 1, wnames, 0); + req =3D twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwalk(req, NULL, NULL); =20 @@ -593,7 +526,7 @@ static void do_mkdir(QVirtio9P *v9p, const char *path, = const char *cname) uint32_t fid; P9Req *req; =20 - fid =3D do_walk(v9p, path); + fid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; =20 req =3D v9fs_tmkdir(v9p, fid, name, 0750, 0, 0); v9fs_req_wait_for_reply(req, NULL); @@ -608,7 +541,7 @@ static uint32_t do_lcreate(QVirtio9P *v9p, const char *= path, uint32_t fid; P9Req *req; =20 - fid =3D do_walk(v9p, path); + fid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; =20 req =3D v9fs_tlcreate(v9p, fid, name, 0, 0750, 0, 0); v9fs_req_wait_for_reply(req, NULL); @@ -626,7 +559,7 @@ static void do_symlink(QVirtio9P *v9p, const char *path= , const char *clink, uint32_t fid; P9Req *req; =20 - fid =3D do_walk(v9p, path); + fid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; =20 req =3D v9fs_tsymlink(v9p, fid, name, dst, 0, 0); v9fs_req_wait_for_reply(req, NULL); @@ -640,8 +573,8 @@ static void do_hardlink(QVirtio9P *v9p, const char *pat= h, const char *clink, uint32_t dfid, fid; P9Req *req; =20 - dfid =3D do_walk(v9p, path); - fid =3D do_walk(v9p, to); + dfid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; + fid =3D twalk({ .client =3D v9p, .path =3D to }).newfid; =20 req =3D v9fs_tlink(v9p, dfid, fid, clink, 0); v9fs_req_wait_for_reply(req, NULL); @@ -655,7 +588,7 @@ static void do_unlinkat(QVirtio9P *v9p, const char *atp= ath, const char *rpath, uint32_t fid; P9Req *req; =20 - fid =3D do_walk(v9p, atpath); + fid =3D twalk({ .client =3D v9p, .path =3D atpath }).newfid; =20 req =3D v9fs_tunlinkat(v9p, fid, name, flags, 0); v9fs_req_wait_for_reply(req, NULL); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918615; cv=none; d=zohomail.com; s=zohoarc; b=SXo+97OeoSkbLt4xzK1xzJzXaGZBO7iFXAYwtM80Pe48N4aUn5J6glufHutNVQ08gOgJYpli1ruKQi8jFKmvdJ3hv0qUV4nZRawLln8K6CJGQMxOQBFTOEb3pPzPRIy2eIk5rO0Jr3i9SZvdqzUl4jhrBgbZzeIxHSU6X502QPg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918615; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=CO1UDDpsws+dwDF+8B0MLAL5Cgzq9Iam5a0G6Y/i8/s=; b=jjGy3vC2PXPE/SF00gQIc4W3qPKWhZ3NRxquTdUrowVcEHQU2EeiuvKMPIcd/Jg3l2zY9pM1PWQ+QpAJ+XI0oXKPaev4xpBcGc4cOZqGvio9IYglkYpek5r8yRq6/5LQ08VQyZt7BCeDJ9J3e9RAT+AP/NgihMWmyLlzfntpj2k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918615907467.1409386579704; Tue, 4 Oct 2022 14:23:35 -0700 (PDT) Received: from localhost ([::1]:35848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpO2-00015O-Ro for importer@patchew.org; Tue, 04 Oct 2022 17:23:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54312) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <8b9d3c656ad43b6c953d6bdacd8d9f4c8e599b2a@lizzy.crudebyte.com>) id 1ofpKx-0006DV-M1 for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:28 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:33679) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <8b9d3c656ad43b6c953d6bdacd8d9f4c8e599b2a@lizzy.crudebyte.com>) id 1ofpKv-0002IN-Uy for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=CO1UDDpsws+dwDF+8B0MLAL5Cgzq9Iam5a0G6Y/i8/s=; b=bWgZ0 nhI/XMaMNGVBkWQH8fXgxKb444NHd2iI9w0yrbjVPDhPQfCaRZhYJtrDAi6AJJU4dXJj0mz8sryjy KGpkOMuNVOmPJtW+1K1hHsOgliU2mcP3uQZCj6KFnzapiP+aZcq9Z7NFaRt0FGqt0SYfn8prQadYm d9nDGR+xwNZ50Zsg+NaoIbAxwbK7N1cs9twIoFw+dM1t/iiR3zBCmMH5lqWlmypLDfaGCmWD2HCEx fnzGpZfQn8mz8y6Px8h9OekiyamwwMZm7gP5QfD10M9AB8Zc1sM74X7huWJM67wbNDRGKLGoeShsT vBtRii7YfhdRgRaW5qC5UOUrKZRwg==; Message-Id: <8b9d3c656ad43b6c953d6bdacd8d9f4c8e599b2a.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:29 +0200 Subject: [PATCH 02/20] tests/9p: simplify callers of twalk() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=8b9d3c656ad43b6c953d6bdacd8d9f4c8e599b2a@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918617626100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now as twalk() is using a declarative approach, simplify the code of callers of this function. Signed-off-by: Christian Schoenebeck --- tests/qtest/virtio-9p-test.c | 92 +++++++++++++----------------------- 1 file changed, 32 insertions(+), 60 deletions(-) diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index cf5d6146ad..3c326451b1 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -90,19 +90,17 @@ static void fs_walk(void *obj, void *data, QGuestAlloca= tor *t_alloc) uint16_t nwqid; g_autofree v9fs_qid *wqid =3D NULL; int i; - P9Req *req; =20 for (i =3D 0; i < P9_MAXWELEM; i++) { wnames[i] =3D g_strdup_printf(QTEST_V9FS_SYNTH_WALK_FILE, i); } =20 do_attach(v9p); - req =3D twalk({ + twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, - .nwname =3D P9_MAXWELEM, .wnames =3D wnames, .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, &nwqid, &wqid); + .nwname =3D P9_MAXWELEM, .wnames =3D wnames, + .rwalk =3D { .nwqid =3D &nwqid, .wqid =3D &wqid } + }); =20 g_assert_cmpint(nwqid, =3D=3D, P9_MAXWELEM); =20 @@ -134,12 +132,10 @@ static void fs_readdir(void *obj, void *data, QGuestA= llocator *t_alloc) P9Req *req; =20 do_attach(v9p); - req =3D twalk({ + twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, - .nwname =3D 1, .wnames =3D wnames, .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, &nqid, NULL); + .nwname =3D 1, .wnames =3D wnames, .rwalk.nwqid =3D &nqid + }); g_assert_cmpint(nqid, =3D=3D, 1); =20 req =3D v9fs_tlopen(v9p, 1, O_DIRECTORY, 0); @@ -198,12 +194,10 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t= count) nentries =3D 0; tail =3D NULL; =20 - req =3D twalk({ + twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D fid, - .nwname =3D 1, .wnames =3D wnames, .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, &nqid, NULL); + .nwname =3D 1, .wnames =3D wnames, .rwalk.nwqid =3D &nqid + }); g_assert_cmpint(nqid, =3D=3D, 1); =20 req =3D v9fs_tlopen(v9p, fid, O_DIRECTORY, 0); @@ -266,18 +260,12 @@ static void fs_walk_no_slash(void *obj, void *data, Q= GuestAllocator *t_alloc) QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); char *wnames[] =3D { g_strdup(" /") }; - P9Req *req; - uint32_t err; =20 do_attach(v9p); - req =3D twalk({ + twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlerror(req, &err); - - g_assert_cmpint(err, =3D=3D, ENOENT); + .expectErr =3D ENOENT + }); =20 g_free(wnames[0]); } @@ -312,7 +300,7 @@ static void fs_walk_2nd_nonexistent(void *obj, void *da= ta, do_attach_rqid(v9p, &root_qid); fid =3D twalk({ .client =3D v9p, .path =3D path, - .rwalk.nwqid =3D &nwqid, .rwalk.wqid =3D &wqid + .rwalk =3D { .nwqid =3D &nwqid, .wqid =3D &wqid } }).newfid; /* * The 9p2000 protocol spec says: "nwqid is therefore either nwname or= the @@ -345,12 +333,10 @@ static void fs_walk_none(void *obj, void *data, QGues= tAllocator *t_alloc) v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); =20 - req =3D twalk({ + twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 0, .wnames= =3D NULL, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, NULL, &wqid); + .rwalk.wqid =3D &wqid + }); =20 /* special case: no QID is returned if nwname=3D0 was sent */ g_assert(wqid =3D=3D NULL); @@ -376,12 +362,10 @@ static void fs_walk_dotdot(void *obj, void *data, QGu= estAllocator *t_alloc) v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); =20 - req =3D twalk({ + twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, NULL, &wqid); /* We now we'll get one qid */ + .rwalk.wqid =3D &wqid /* We now we'll get one qid */ + }); =20 g_assert_cmpmem(&root_qid, 13, wqid[0], 13); =20 @@ -396,12 +380,9 @@ static void fs_lopen(void *obj, void *data, QGuestAllo= cator *t_alloc) P9Req *req; =20 do_attach(v9p); - req =3D twalk({ - .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, NULL, NULL); + twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames + }); =20 req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); v9fs_req_wait_for_reply(req, NULL); @@ -421,12 +402,9 @@ static void fs_write(void *obj, void *data, QGuestAllo= cator *t_alloc) P9Req *req; =20 do_attach(v9p); - req =3D twalk({ - .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, NULL, NULL); + twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames + }); =20 req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); v9fs_req_wait_for_reply(req, NULL); @@ -450,12 +428,9 @@ static void fs_flush_success(void *obj, void *data, QG= uestAllocator *t_alloc) uint8_t should_block; =20 do_attach(v9p); - req =3D twalk({ - .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, NULL, NULL); + twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames + }); =20 req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); v9fs_req_wait_for_reply(req, NULL); @@ -490,12 +465,9 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) uint8_t should_block; =20 do_attach(v9p); - req =3D twalk({ - .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwalk(req, NULL, NULL); + twalk({ + .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames + }); =20 req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); v9fs_req_wait_for_reply(req, NULL); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918856; cv=none; d=zohomail.com; s=zohoarc; b=QfsEe40TpAmlZ0mkfQlyhX7aCFpsyVqcfXwCoZFclyYk+iJ0IDwQJJP8of8GZftS/KBrJL2kVnxPGEhe64OgEXH/+Rz8G7s5ZzHo31uaD3b+IHw0bVWCFCpS47Sj+epAVr753BVDFI2SFEOvCL1ES6aqfe9PRtVNJ3m18HEpI5Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918856; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=000tjLepe1NC+XqaptNYAlx52LjBqyTjjAoYn7jobVY=; b=klArIqarZiF3j1d2aKVFuYTDC2D61T4qkJ9BompF4qeYuILA0Y8bQwMhRV3VCSJuelGbJtXkuTF45QDh2oaZJyJ4YR7BlKRPCBRo3eq3ujvKtMw7eMoXOSpOBUtSU6rPDUHgYwDSJ/Hh/0G/+OpuKZm6pjH6bctDn+rnUQSj96s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918856028133.5734012282794; Tue, 4 Oct 2022 14:27:36 -0700 (PDT) Received: from localhost ([::1]:45398 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpRv-00081S-2D for importer@patchew.org; Tue, 04 Oct 2022 17:27:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44756) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <2d253491aaffd267ec295f056dda47456692cd0c@lizzy.crudebyte.com>) id 1ofpL2-0006Fw-G3 for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:51 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:40435) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <2d253491aaffd267ec295f056dda47456692cd0c@lizzy.crudebyte.com>) id 1ofpL0-0002Ia-QN for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=000tjLepe1NC+XqaptNYAlx52LjBqyTjjAoYn7jobVY=; b=SjSJW VtTAqPPjuzm7whMwKCOxb4M5i0quTZ9jeJhgWos9xhsX4XN204KmwCAZAW2WoRtUyAEIR00NEB0LG yk1Ttuhx+TTi91VeFZQCgRVn8zfCFtxjort6Z7G0kz1j2QrCRRpdIEllWvHnV7OC5g+T2T5eztevs oLcMIcWlth+XTsu/D5CoUBasdw/fHOpV2dZHRo48CrWNhwn/7ZWJmeVa65Sy37ako3FXQCAgE2xXd V8bAOtCtqcOEZ25a6swfzZNIaG7cXpOxhvZlvV1vYD1bGKfK5ogkhSnGJzH9Fw6nV9nTJs8uXhW6Z SM5vvhn9BgkII8zyXi4or3TS1FcBA==; Message-Id: <2d253491aaffd267ec295f056dda47456692cd0c.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:33 +0200 Subject: [PATCH 03/20] tests/9p: merge v9fs_tversion() and do_version() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=2d253491aaffd267ec295f056dda47456692cd0c@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918857797100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify functions v9fs_tversion() and do_version() into a single function v9fs_tversion() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 47 +++++++++++++++++++++++---- tests/qtest/libqos/virtio-9p-client.h | 25 ++++++++++++-- tests/qtest/virtio-9p-test.c | 23 +++---------- 3 files changed, 68 insertions(+), 27 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index a95bbad9c8..e8364f8d64 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -291,21 +291,54 @@ void v9fs_rlerror(P9Req *req, uint32_t *err) } =20 /* size[4] Tversion tag[2] msize[4] version[s] */ -P9Req *v9fs_tversion(QVirtio9P *v9p, uint32_t msize, const char *version, - uint16_t tag) +TVersionRes v9fs_tversion(TVersionOpt opt) { P9Req *req; + uint32_t err; uint32_t body_size =3D 4; - uint16_t string_size =3D v9fs_string_size(version); + uint16_t string_size; + uint16_t server_len; + g_autofree char *server_version =3D NULL; =20 + g_assert(opt.client); + + if (!opt.msize) { + opt.msize =3D P9_MAX_SIZE; + } + + if (!opt.tag) { + opt.tag =3D P9_NOTAG; + } + + if (!opt.version) { + opt.version =3D "9P2000.L"; + } + + string_size =3D v9fs_string_size(opt.version); g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; - req =3D v9fs_req_init(v9p, body_size, P9_TVERSION, tag); + req =3D v9fs_req_init(opt.client, body_size, P9_TVERSION, opt.tag); =20 - v9fs_uint32_write(req, msize); - v9fs_string_write(req, version); + v9fs_uint32_write(req, opt.msize); + v9fs_string_write(req, opt.version); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rversion(req, &server_len, &server_version); + g_assert_cmpmem(server_version, server_len, + opt.version, strlen(opt.version)); + } + req =3D NULL; /* request was freed */ + } + + return (TVersionRes) { + .req =3D req, + }; } =20 /* size[4] Rversion tag[2] msize[4] version[s] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index 8c6abbb173..fcde849b5d 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -106,6 +106,28 @@ typedef struct TWalkRes { P9Req *req; } TWalkRes; =20 +/* options for 'Tversion' 9p request */ +typedef struct TVersionOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* maximum message size that can be handled by client (optional) */ + uint32_t msize; + /* protocol version (optional) */ + const char *version; + /* only send Tversion request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TVersionOpt; + +/* result of 'Tversion' 9p request */ +typedef struct TVersionRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TVersionRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -127,8 +149,7 @@ void v9fs_req_wait_for_reply(P9Req *req, uint32_t *len); void v9fs_req_recv(P9Req *req, uint8_t id); void v9fs_req_free(P9Req *req); void v9fs_rlerror(P9Req *req, uint32_t *err); -P9Req *v9fs_tversion(QVirtio9P *v9p, uint32_t msize, const char *version, - uint16_t tag); +TVersionRes v9fs_tversion(TVersionOpt); void v9fs_rversion(P9Req *req, uint16_t *len, char **version); P9Req *v9fs_tattach(QVirtio9P *v9p, uint32_t fid, uint32_t n_uname, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 3c326451b1..f2907c8026 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -17,6 +17,7 @@ #include "libqos/virtio-9p-client.h" =20 #define twalk(...) v9fs_twalk((TWalkOpt) __VA_ARGS__) +#define tversion(...) v9fs_tversion((TVersionOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -41,31 +42,17 @@ static inline bool is_same_qid(v9fs_qid a, v9fs_qid b) return a[0] =3D=3D b[0] && memcmp(&a[5], &b[5], 8) =3D=3D 0; } =20 -static void do_version(QVirtio9P *v9p) -{ - const char *version =3D "9P2000.L"; - uint16_t server_len; - g_autofree char *server_version =3D NULL; - P9Req *req; - - req =3D v9fs_tversion(v9p, P9_MAX_SIZE, version, P9_NOTAG); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rversion(req, &server_len, &server_version); - - g_assert_cmpmem(server_version, server_len, version, strlen(version)); -} - static void fs_version(void *obj, void *data, QGuestAllocator *t_alloc) { v9fs_set_allocator(t_alloc); - do_version(obj); + tversion({ .client =3D obj }); } =20 static void do_attach_rqid(QVirtio9P *v9p, v9fs_qid *qid) { P9Req *req; =20 - do_version(v9p); + tversion({ .client =3D v9p }); req =3D v9fs_tattach(v9p, 0, getuid(), 0); v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, qid); @@ -328,7 +315,7 @@ static void fs_walk_none(void *obj, void *data, QGuestA= llocator *t_alloc) P9Req *req; struct v9fs_attr attr; =20 - do_version(v9p); + tversion({ .client =3D v9p }); req =3D v9fs_tattach(v9p, 0, getuid(), 0); v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); @@ -357,7 +344,7 @@ static void fs_walk_dotdot(void *obj, void *data, QGues= tAllocator *t_alloc) g_autofree v9fs_qid *wqid =3D NULL; P9Req *req; =20 - do_version(v9p); + tversion({ .client =3D v9p }); req =3D v9fs_tattach(v9p, 0, getuid(), 0); v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918626; cv=none; d=zohomail.com; s=zohoarc; b=JkaoPvzFwacXnoHWwIWbbL8bRVizrlkPXqONmwB3KogU8VvUk0XD2Y0+8kkc2qDdXD4PYaVcKxvvmwKFZdreaEuKmKyKnxiJMPeL5pkCzirD9h9Vn3Cis7X98y2SbGuvBqkAvswqpfdqOJ1sM1HhU8MJo6idOaCTlCIi8ccD47E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918626; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=W/mF2F4tQFVDyngzLVA7v3cT2qQpUTzo3jAH7URYgKo=; b=GZ7BOwPl6Uuw8rl+u+MA9+HbTWYSRry+r2p0W58FE8rjhCla59wW7X5i/1SJ4yaUimpshZEXjrelv1NG4ma/9qy4ZDLg0+qEFrFsa1muRkK6XjaJ5WFnNqH82MM6IxorEvYx4VKotdxB7yRtgVEIlUG8EZejxKI0oyh7/9mR9eY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918626179756.072568220528; Tue, 4 Oct 2022 14:23:46 -0700 (PDT) Received: from localhost ([::1]:38482 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpOD-0001il-0r for importer@patchew.org; Tue, 04 Oct 2022 17:23:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLA-0006Gw-QI for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:51 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:60129) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpL7-0002Is-4F for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=W/mF2F4tQFVDyngzLVA7v3cT2qQpUTzo3jAH7URYgKo=; b=emUlj 3ih4unmDN7AWyaWqZ6AG/NjuZV6lbmsfAuerBNZ6paQyZuyzMCUCLSskKkMOHi8LAfec+KkHX8uhP k5J3Jg760O4ckUO5e4dD7E3Pni5D0ite65/3Pa35SbR7TfXKYDyzT3Rb3Jb/ZoKYOwJlaUcHY1Tfe +MwVXXKRm70iQLjY06wH2tGXRn87S/8frnDoPMOKeS9Iz057V8c+XQUaPkzyJ1PIE48+uKGY+NuyI fvONwdaH6+1PdkOG1WvPDScLiRpp7CvTVpji7JENynlykjY1bvlonrV6DjviYke7ZkHtyOA/YGYLY uNtjZBcQ+kYGPctuypNZnui80Y1uQ==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:36 +0200 Subject: [PATCH 04/20] tests/9p: merge v9fs_tattach(), do_attach(), do_attach_rqid() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=a6756b30bf2a1b25729c5bbabd1c9534a8f20d6f@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918627787100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify those 3 functions into a single function v9fs_tattach() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 40 ++++++++++++++--- tests/qtest/libqos/virtio-9p-client.h | 30 ++++++++++++- tests/qtest/virtio-9p-test.c | 62 +++++++++++---------------- 3 files changed, 88 insertions(+), 44 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index e8364f8d64..5e6bd6120c 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -359,20 +359,48 @@ void v9fs_rversion(P9Req *req, uint16_t *len, char **= version) } =20 /* size[4] Tattach tag[2] fid[4] afid[4] uname[s] aname[s] n_uname[4] */ -P9Req *v9fs_tattach(QVirtio9P *v9p, uint32_t fid, uint32_t n_uname, - uint16_t tag) +TAttachRes v9fs_tattach(TAttachOpt opt) { + uint32_t err; const char *uname =3D ""; /* ignored by QEMU */ const char *aname =3D ""; /* ignored by QEMU */ - P9Req *req =3D v9fs_req_init(v9p, 4 + 4 + 2 + 2 + 4, P9_TATTACH, tag); =20 - v9fs_uint32_write(req, fid); + g_assert(opt.client); + /* expecting either Rattach or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !opt.rattach.qid); + + if (!opt.requestOnly) { + v9fs_tversion((TVersionOpt) { .client =3D opt.client }); + } + + if (!opt.n_uname) { + opt.n_uname =3D getuid(); + } + + P9Req *req =3D v9fs_req_init(opt.client, 4 + 4 + 2 + 2 + 4, P9_TATTACH, + opt.tag); + + v9fs_uint32_write(req, opt.fid); v9fs_uint32_write(req, P9_NOFID); v9fs_string_write(req, uname); v9fs_string_write(req, aname); - v9fs_uint32_write(req, n_uname); + v9fs_uint32_write(req, opt.n_uname); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rattach(req, opt.rattach.qid); + } + req =3D NULL; /* request was freed */ + } + + return (TAttachRes) { + .req =3D req, + }; } =20 /* size[4] Rattach tag[2] qid[13] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index fcde849b5d..64b97b229b 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -128,6 +128,33 @@ typedef struct TVersionRes { P9Req *req; } TVersionRes; =20 +/* options for 'Tattach' 9p request */ +typedef struct TAttachOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* file ID to be associated with root of file tree (optional) */ + uint32_t fid; + /* numerical uid of user being introduced to server (optional) */ + uint32_t n_uname; + /* data being received from 9p server as 'Rattach' response (optional)= */ + struct { + /* server's idea of the root of the file tree */ + v9fs_qid *qid; + } rattach; + /* only send Tattach request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TAttachOpt; + +/* result of 'Tattach' 9p request */ +typedef struct TAttachRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TAttachRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -151,8 +178,7 @@ void v9fs_req_free(P9Req *req); void v9fs_rlerror(P9Req *req, uint32_t *err); TVersionRes v9fs_tversion(TVersionOpt); void v9fs_rversion(P9Req *req, uint16_t *len, char **version); -P9Req *v9fs_tattach(QVirtio9P *v9p, uint32_t fid, uint32_t n_uname, - uint16_t tag); +TAttachRes v9fs_tattach(TAttachOpt); void v9fs_rattach(P9Req *req, v9fs_qid *qid); TWalkRes v9fs_twalk(TWalkOpt opt); void v9fs_rwalk(P9Req *req, uint16_t *nwqid, v9fs_qid **wqid); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index f2907c8026..271c42f6f9 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -18,6 +18,7 @@ =20 #define twalk(...) v9fs_twalk((TWalkOpt) __VA_ARGS__) #define tversion(...) v9fs_tversion((TVersionOpt) __VA_ARGS__) +#define tattach(...) v9fs_tattach((TAttachOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -48,25 +49,10 @@ static void fs_version(void *obj, void *data, QGuestAll= ocator *t_alloc) tversion({ .client =3D obj }); } =20 -static void do_attach_rqid(QVirtio9P *v9p, v9fs_qid *qid) -{ - P9Req *req; - - tversion({ .client =3D v9p }); - req =3D v9fs_tattach(v9p, 0, getuid(), 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rattach(req, qid); -} - -static void do_attach(QVirtio9P *v9p) -{ - do_attach_rqid(v9p, NULL); -} - static void fs_attach(void *obj, void *data, QGuestAllocator *t_alloc) { v9fs_set_allocator(t_alloc); - do_attach(obj); + tattach({ .client =3D obj }); } =20 static void fs_walk(void *obj, void *data, QGuestAllocator *t_alloc) @@ -82,7 +68,7 @@ static void fs_walk(void *obj, void *data, QGuestAllocato= r *t_alloc) wnames[i] =3D g_strdup_printf(QTEST_V9FS_SYNTH_WALK_FILE, i); } =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D P9_MAXWELEM, .wnames =3D wnames, @@ -118,7 +104,7 @@ static void fs_readdir(void *obj, void *data, QGuestAll= ocator *t_alloc) struct V9fsDirent *entries =3D NULL; P9Req *req; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames =3D wnames, .rwalk.nwqid =3D &nqid @@ -173,7 +159,7 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t c= ount) int fid; uint64_t offset; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); =20 fid =3D 1; offset =3D 0; @@ -248,7 +234,7 @@ static void fs_walk_no_slash(void *obj, void *data, QGu= estAllocator *t_alloc) v9fs_set_allocator(t_alloc); char *wnames[] =3D { g_strdup(" /") }; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, .expectErr =3D ENOENT @@ -262,7 +248,7 @@ static void fs_walk_nonexistent(void *obj, void *data, = QGuestAllocator *t_alloc) QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); /* * The 9p2000 protocol spec says: "If the first element cannot be walk= ed * for any reason, Rerror is returned." @@ -284,7 +270,7 @@ static void fs_walk_2nd_nonexistent(void *obj, void *da= ta, QTEST_V9FS_SYNTH_WALK_FILE "/non-existent", 0 ); =20 - do_attach_rqid(v9p, &root_qid); + tattach({ .client =3D v9p, .rattach.qid =3D &root_qid }); fid =3D twalk({ .client =3D v9p, .path =3D path, .rwalk =3D { .nwqid =3D &nwqid, .wqid =3D &wqid } @@ -316,7 +302,9 @@ static void fs_walk_none(void *obj, void *data, QGuestA= llocator *t_alloc) struct v9fs_attr attr; =20 tversion({ .client =3D v9p }); - req =3D v9fs_tattach(v9p, 0, getuid(), 0); + req =3D tattach({ + .client =3D v9p, .fid =3D 0, .n_uname =3D getuid(), .requestOnly = =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); =20 @@ -345,7 +333,9 @@ static void fs_walk_dotdot(void *obj, void *data, QGues= tAllocator *t_alloc) P9Req *req; =20 tversion({ .client =3D v9p }); - req =3D v9fs_tattach(v9p, 0, getuid(), 0); + req =3D tattach((TAttachOpt) { + .client =3D v9p, .fid =3D 0, .n_uname =3D getuid(), .requestOnly = =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rattach(req, &root_qid); =20 @@ -366,7 +356,7 @@ static void fs_lopen(void *obj, void *data, QGuestAlloc= ator *t_alloc) char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_LOPEN_FILE) }; P9Req *req; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); @@ -388,7 +378,7 @@ static void fs_write(void *obj, void *data, QGuestAlloc= ator *t_alloc) uint32_t count; P9Req *req; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); @@ -414,7 +404,7 @@ static void fs_flush_success(void *obj, void *data, QGu= estAllocator *t_alloc) uint32_t reply_len; uint8_t should_block; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); @@ -451,7 +441,7 @@ static void fs_flush_ignored(void *obj, void *data, QGu= estAllocator *t_alloc) uint32_t count; uint8_t should_block; =20 - do_attach(v9p); + tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); @@ -588,7 +578,7 @@ static void fs_create_dir(void *obj, void *data, QGuest= Allocator *t_alloc) =20 g_assert(root_path !=3D NULL); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "01"); =20 /* check if created directory really exists now ... */ @@ -607,7 +597,7 @@ static void fs_unlinkat_dir(void *obj, void *data, QGue= stAllocator *t_alloc) =20 g_assert(root_path !=3D NULL); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "02"); =20 /* check if created directory really exists now ... */ @@ -627,7 +617,7 @@ static void fs_create_file(void *obj, void *data, QGues= tAllocator *t_alloc) struct stat st; g_autofree char *new_file =3D virtio_9p_test_path("03/1st_file"); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "03"); do_lcreate(v9p, "03", "1st_file"); =20 @@ -644,7 +634,7 @@ static void fs_unlinkat_file(void *obj, void *data, QGu= estAllocator *t_alloc) struct stat st; g_autofree char *new_file =3D virtio_9p_test_path("04/doa_file"); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "04"); do_lcreate(v9p, "04", "doa_file"); =20 @@ -666,7 +656,7 @@ static void fs_symlink_file(void *obj, void *data, QGue= stAllocator *t_alloc) g_autofree char *real_file =3D virtio_9p_test_path("05/real_file"); g_autofree char *symlink_file =3D virtio_9p_test_path("05/symlink_file= "); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "05"); do_lcreate(v9p, "05", "real_file"); g_assert(stat(real_file, &st) =3D=3D 0); @@ -687,7 +677,7 @@ static void fs_unlinkat_symlink(void *obj, void *data, g_autofree char *real_file =3D virtio_9p_test_path("06/real_file"); g_autofree char *symlink_file =3D virtio_9p_test_path("06/symlink_file= "); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "06"); do_lcreate(v9p, "06", "real_file"); g_assert(stat(real_file, &st) =3D=3D 0); @@ -709,7 +699,7 @@ static void fs_hardlink_file(void *obj, void *data, QGu= estAllocator *t_alloc) g_autofree char *real_file =3D virtio_9p_test_path("07/real_file"); g_autofree char *hardlink_file =3D virtio_9p_test_path("07/hardlink_fi= le"); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "07"); do_lcreate(v9p, "07", "real_file"); g_assert(stat(real_file, &st_real) =3D=3D 0); @@ -734,7 +724,7 @@ static void fs_unlinkat_hardlink(void *obj, void *data, g_autofree char *real_file =3D virtio_9p_test_path("08/real_file"); g_autofree char *hardlink_file =3D virtio_9p_test_path("08/hardlink_fi= le"); =20 - do_attach(v9p); + tattach({ .client =3D v9p }); do_mkdir(v9p, "/", "08"); do_lcreate(v9p, "08", "real_file"); g_assert(stat(real_file, &st_real) =3D=3D 0); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918843; cv=none; d=zohomail.com; s=zohoarc; b=Hz1ckMkSr0rmrn8zKv+FWqHC51lsyWCVacStyV+95KU9ipPxTosiztKXYWmQ3XT/t74sw/dq2NID1l8WqOZ5l5pPmvn5QbZkFOEFDIJpcrNsSzF6t0AxkQwbvYHG/yHNJfr2eFdAft2FmxZiee9ogFpcqjclIWPQUfwifo802WU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918843; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=uBPVKXAiglNBxu9yfa09lCFCMWjpdddqcwXn7bHsoPI=; b=iKROZ5fIwI6cnpN/SuuBhKsflA0hmfV5rARKcVWV3VhXcslVahvT4cA0pHwTdz2JbBEycCol7vDZKO5Yy6n7KRL3w7z/Ytkyr9CsqfBPRcBq02yf1eDYQAis7oIJFYEIfj4wfdQnX60Bk9SPFZYaSQDUEJzeUhvsxAq6nUeNGOU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918843936549.5401637681806; Tue, 4 Oct 2022 14:27:23 -0700 (PDT) Received: from localhost ([::1]:56072 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpRi-0007Sj-TO for importer@patchew.org; Tue, 04 Oct 2022 17:27:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56852) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <9b50e5b89a0072e84a9191d18c19a53546a28bba@lizzy.crudebyte.com>) id 1ofpLG-0006Ib-CF for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:57 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:43139) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <9b50e5b89a0072e84a9191d18c19a53546a28bba@lizzy.crudebyte.com>) id 1ofpLD-0002Ja-SB for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=uBPVKXAiglNBxu9yfa09lCFCMWjpdddqcwXn7bHsoPI=; b=IpHha o+W39RZ0nvocUadFW/maVCf+j8NdBM3A9HNnexBwNJerhdjvUlAe1l9EmINGrTiD2P6QfjYxT7DzG LTGLku+8X0/KMi9mXs5qxZlrxsHnEey6zypBlRPkpE2VYm/Eh2I4qjuE1qdeBmuiRvnJbs83tyCrg YqZkB/uOab/YIaLVo2Y0xZEOm0z+9PZGi1aXX+E8EqCDGfn7xcC0wcNiHf7APHLFu0N/o4GQJBTIV J9lgHGcHSbmTIcIKGTYFFoOKmFOsgrDMRszyDwruI+TDCDO1ye1qoJJTYKWOSLJ5KpIuLgksrXZ1O XwXXtyupCF3wOc2j3AIIWvgsubRbQ==; Message-Id: <9b50e5b89a0072e84a9191d18c19a53546a28bba.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:38 +0200 Subject: [PATCH 05/20] tests/9p: simplify callers of tattach() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=9b50e5b89a0072e84a9191d18c19a53546a28bba@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918845723100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now as tattach() is using a declarative approach, simplify the code of callers of this function. Signed-off-by: Christian Schoenebeck --- tests/qtest/virtio-9p-test.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 271c42f6f9..46bb189b81 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -302,11 +302,10 @@ static void fs_walk_none(void *obj, void *data, QGues= tAllocator *t_alloc) struct v9fs_attr attr; =20 tversion({ .client =3D v9p }); - req =3D tattach({ - .client =3D v9p, .fid =3D 0, .n_uname =3D getuid(), .requestOnly = =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rattach(req, &root_qid); + tattach({ + .client =3D v9p, .fid =3D 0, .n_uname =3D getuid(), + .rattach.qid =3D &root_qid + }); =20 twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 0, .wnames= =3D NULL, @@ -330,14 +329,12 @@ static void fs_walk_dotdot(void *obj, void *data, QGu= estAllocator *t_alloc) char *wnames[] =3D { g_strdup("..") }; v9fs_qid root_qid; g_autofree v9fs_qid *wqid =3D NULL; - P9Req *req; =20 tversion({ .client =3D v9p }); - req =3D tattach((TAttachOpt) { - .client =3D v9p, .fid =3D 0, .n_uname =3D getuid(), .requestOnly = =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rattach(req, &root_qid); + tattach({ + .client =3D v9p, .fid =3D 0, .n_uname =3D getuid(), + .rattach.qid =3D &root_qid + }); =20 twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames, --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918847; cv=none; d=zohomail.com; s=zohoarc; b=Dp0VFfbnRU7HM0rpdyMN96wrmH9N2j3dP6KckwhKg7O0/spge4tJ432g+dkgIAsAp2ldIc0+J0E1waupyNkqG8EYyCcIHgGK1eH5cIqrKbi3efOVPAJz90UbWBaiihYuyzSArIi7O2uD5VqvdDHyFJhVoLDLURyh7jUQogI+q68= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918847; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=zw4F6xRuxZ4bjW8gLP8nqhQKbn86gHoWOQCmvMX6DQI=; b=hQV1XAjXHd6LwVsfsIXDuQ6zdU4KQZkyQPqLdyt1e14wgbhvzip83Xx52B3I/QCjGGVHOjSKkKFXxidrSpbgc7LZ7Z+z6khIb27YVlKAP0LF3+46U8afp9VuJVr5qgWZ+ZmG5uENXh7rbNB3X4LUpS2eEA6cSZRaxyfsnsxZUQY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918847095514.7022851526258; Tue, 4 Oct 2022 14:27:27 -0700 (PDT) Received: from localhost ([::1]:56074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpRl-0007WI-Dw for importer@patchew.org; Tue, 04 Oct 2022 17:27:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLQ-0006L0-1x for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:57 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:39017) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLK-0002LM-0c for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=zw4F6xRuxZ4bjW8gLP8nqhQKbn86gHoWOQCmvMX6DQI=; b=FJS0j Mni4I+vUJCScvD/wLszO6VhlEvi/404rHq7PKsnqzsgD9zjekweSkVL45dcghz9Y30w4tesi3qFZL Z3FmTtVrgzAzCa513ZY2JZ9OC6o4RIRXj5x1m1z8tTRQMCN3uwY/oJ5IVCx6r8nYP7KCIs3of5btG CcPoR90ffcaj6YL5pQfd34EsPbCHZjA8+6Kg0r1sE9+tkwIBqsxATQPSaWxSYp6515yh3ppYB6CZ8 sdh8AZUUuJjdyuJowrKw0R+VnwPlcsaxZOe/bkNV5aq1c5+oMOWuZK9zhLzdZj0mwMI93pamckDbL UrKoAgdk4T6OsiYGtN6LAcD8gRN5A==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:41 +0200 Subject: [PATCH 06/20] tests/9p: convert v9fs_tgetattr() to declarative arguments To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=d340a91be96fbfecfb8dacdd7558223b3c0d0e2c@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918847719100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use declarative function arguments for function v9fs_tgetattr(). Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 32 ++++++++++++++++++++++----- tests/qtest/libqos/virtio-9p-client.h | 30 +++++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 11 +++++++-- 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 5e6bd6120c..29916a23b5 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -489,16 +489,36 @@ void v9fs_rwalk(P9Req *req, uint16_t *nwqid, v9fs_qid= **wqid) } =20 /* size[4] Tgetattr tag[2] fid[4] request_mask[8] */ -P9Req *v9fs_tgetattr(QVirtio9P *v9p, uint32_t fid, uint64_t request_mask, - uint16_t tag) +TGetAttrRes v9fs_tgetattr(TGetAttrOpt opt) { P9Req *req; + uint32_t err; =20 - req =3D v9fs_req_init(v9p, 4 + 8, P9_TGETATTR, tag); - v9fs_uint32_write(req, fid); - v9fs_uint64_write(req, request_mask); + g_assert(opt.client); + /* expecting either Rgetattr or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !opt.rgetattr.attr); + + if (!opt.request_mask) { + opt.request_mask =3D P9_GETATTR_ALL; + } + + req =3D v9fs_req_init(opt.client, 4 + 8, P9_TGETATTR, opt.tag); + v9fs_uint32_write(req, opt.fid); + v9fs_uint64_write(req, opt.request_mask); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rgetattr(req, opt.rgetattr.attr); + } + req =3D NULL; /* request was freed */ + } + + return (TGetAttrRes) { .req =3D req }; } =20 /* diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index 64b97b229b..f7b1bfc79a 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -63,6 +63,7 @@ typedef struct v9fs_attr { } v9fs_attr; =20 #define P9_GETATTR_BASIC 0x000007ffULL /* Mask for fields up to BLOCKS = */ +#define P9_GETATTR_ALL 0x00003fffULL /* Mask for ALL fields */ =20 struct V9fsDirent { v9fs_qid qid; @@ -155,6 +156,32 @@ typedef struct TAttachRes { P9Req *req; } TAttachRes; =20 +/* options for 'Tgetattr' 9p request */ +typedef struct TGetAttrOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* file ID of file/dir whose attributes shall be retrieved (required) = */ + uint32_t fid; + /* bitmask indicating attribute fields to be retrieved (optional) */ + uint64_t request_mask; + /* data being received from 9p server as 'Rgetattr' response (optional= ) */ + struct { + v9fs_attr *attr; + } rgetattr; + /* only send Tgetattr request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TGetAttrOpt; + +/* result of 'Tgetattr' 9p request */ +typedef struct TGetAttrRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TGetAttrRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -182,8 +209,7 @@ TAttachRes v9fs_tattach(TAttachOpt); void v9fs_rattach(P9Req *req, v9fs_qid *qid); TWalkRes v9fs_twalk(TWalkOpt opt); void v9fs_rwalk(P9Req *req, uint16_t *nwqid, v9fs_qid **wqid); -P9Req *v9fs_tgetattr(QVirtio9P *v9p, uint32_t fid, uint64_t request_mask, - uint16_t tag); +TGetAttrRes v9fs_tgetattr(TGetAttrOpt); void v9fs_rgetattr(P9Req *req, v9fs_attr *attr); P9Req *v9fs_treaddir(QVirtio9P *v9p, uint32_t fid, uint64_t offset, uint32_t count, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 46bb189b81..9c1219db33 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -19,6 +19,7 @@ #define twalk(...) v9fs_twalk((TWalkOpt) __VA_ARGS__) #define tversion(...) v9fs_tversion((TVersionOpt) __VA_ARGS__) #define tattach(...) v9fs_tattach((TAttachOpt) __VA_ARGS__) +#define tgetattr(...) v9fs_tgetattr((TGetAttrOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -285,7 +286,10 @@ static void fs_walk_2nd_nonexistent(void *obj, void *d= ata, g_assert(wqid && wqid[0] && !is_same_qid(root_qid, wqid[0])); =20 /* expect fid being unaffected by walk above */ - req =3D v9fs_tgetattr(v9p, fid, P9_GETATTR_BASIC, 0); + req =3D tgetattr({ + .client =3D v9p, .fid =3D fid, .request_mask =3D P9_GETATTR_BASIC, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlerror(req, &err); =20 @@ -315,7 +319,10 @@ static void fs_walk_none(void *obj, void *data, QGuest= Allocator *t_alloc) /* special case: no QID is returned if nwname=3D0 was sent */ g_assert(wqid =3D=3D NULL); =20 - req =3D v9fs_tgetattr(v9p, 1, P9_GETATTR_BASIC, 0); + req =3D tgetattr({ + .client =3D v9p, .fid =3D 1, .request_mask =3D P9_GETATTR_BASIC, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rgetattr(req, &attr); =20 --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919200; cv=none; d=zohomail.com; s=zohoarc; b=VB5qAE6q2HJedbrpIOLblGIvjNVC9VM3TYojRc/NcaFEg8zzgOKb+P/Qz9Q4VpKahL7SHwYmxX9oLQ8J8QQfIYzvwndxbtxrZwJC3TuZmSwnNT4LTSaoM36HsVZEyfRA9u2PEYMx3EsIC+pbMokLD7MOfPjjgpeQvspAWnr+Zco= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919200; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=/MMjlmGcZsUSLLetGbdWwUYm5XcRnFhhIZO0YhKsmwU=; b=PjqPK/pzJzP47bRnbvIAd1wJdPLSHbgh3jPEsSI1my1+TMnlqhsdXo/Qw0XdFdb20LGCRxqVpXZy9ik9Ar5u7J9+ioKErWQy/Z9+GGOumWVad/GG1rcnjootk0+hCUhUNQhNCLRjWgvia9dC3rk7yyEk99RXC7061BlznEs7psE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919200009202.4858408903209; Tue, 4 Oct 2022 14:33:20 -0700 (PDT) Received: from localhost ([::1]:46262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpXI-0005R3-Nk for importer@patchew.org; Tue, 04 Oct 2022 17:33:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <60c6a083f320b86f3172951445df7bbc895932e2@lizzy.crudebyte.com>) id 1ofpLW-0006Mo-Ez for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:58 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:59903) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <60c6a083f320b86f3172951445df7bbc895932e2@lizzy.crudebyte.com>) id 1ofpLR-0002M6-47 for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:20:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=/MMjlmGcZsUSLLetGbdWwUYm5XcRnFhhIZO0YhKsmwU=; b=lcxEA tVNYhWqNucO7WxnhUIRwE6N2R9qbXuSDCLnjFvihuqXZm2fma9Z6W994IDJQB9mn58SrYb8u4hk2W GKgDY3dC0ZrqECKEcQyGNPPj/w0XgXZCCcoAsYsK9f8MLsim3yitptU6kymDRRzcIi3v6t6lCzL3c 7b1OfPrjfwj4rtwqTVb3PIwvi82TNT8ElBFZF+M2ejPBYwZWuXkrp1GbxEbsiZ1R2TSR9ZC1obbW0 gIRMZhYm5LK+H8tWtP6Re1fKX1dIQZIjLIZ8JFSRLCm0H8mI4r98kAOQywsTbhRZU6JaTJBtCR2VP aFArqDGhSkgOkQBMrSRZFFQ3bOVug==; Message-Id: <60c6a083f320b86f3172951445df7bbc895932e2.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:44 +0200 Subject: [PATCH 07/20] tests/9p: simplify callers of tgetattr() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=60c6a083f320b86f3172951445df7bbc895932e2@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919202105100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now as tgetattr() is using a declarative approach, simplify the code of callers of this function. Signed-off-by: Christian Schoenebeck --- tests/qtest/virtio-9p-test.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 9c1219db33..ae1220d0cb 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -264,8 +264,7 @@ static void fs_walk_2nd_nonexistent(void *obj, void *da= ta, v9fs_set_allocator(t_alloc); v9fs_qid root_qid; uint16_t nwqid; - uint32_t fid, err; - P9Req *req; + uint32_t fid; g_autofree v9fs_qid *wqid =3D NULL; g_autofree char *path =3D g_strdup_printf( QTEST_V9FS_SYNTH_WALK_FILE "/non-existent", 0 @@ -286,14 +285,10 @@ static void fs_walk_2nd_nonexistent(void *obj, void *= data, g_assert(wqid && wqid[0] && !is_same_qid(root_qid, wqid[0])); =20 /* expect fid being unaffected by walk above */ - req =3D tgetattr({ + tgetattr({ .client =3D v9p, .fid =3D fid, .request_mask =3D P9_GETATTR_BASIC, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlerror(req, &err); - - g_assert_cmpint(err, =3D=3D, ENOENT); + .expectErr =3D ENOENT + }); } =20 static void fs_walk_none(void *obj, void *data, QGuestAllocator *t_alloc) @@ -302,7 +297,6 @@ static void fs_walk_none(void *obj, void *data, QGuestA= llocator *t_alloc) v9fs_set_allocator(t_alloc); v9fs_qid root_qid; g_autofree v9fs_qid *wqid =3D NULL; - P9Req *req; struct v9fs_attr attr; =20 tversion({ .client =3D v9p }); @@ -319,12 +313,10 @@ static void fs_walk_none(void *obj, void *data, QGues= tAllocator *t_alloc) /* special case: no QID is returned if nwname=3D0 was sent */ g_assert(wqid =3D=3D NULL); =20 - req =3D tgetattr({ + tgetattr({ .client =3D v9p, .fid =3D 1, .request_mask =3D P9_GETATTR_BASIC, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rgetattr(req, &attr); + .rgetattr.attr =3D &attr + }); =20 g_assert(is_same_qid(root_qid, attr.qid)); } --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919720; cv=none; d=zohomail.com; s=zohoarc; b=WDwEN4eJjLq9gErghUPgZ7VXKNey63d1+L1QO4unRYJP+NStl1N7vPyMw7Bw1z2IyfYjFftCvxqrHlknVraGhD4wGa9viwWN1pFjCEF7KZoFwZJZfngeYRrUlS49xlIQGyR0FrzaiW8Q3/8u4aaiRckWjwN0ZdORtzQSmiwgw3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919720; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=bMICiGG7wF5iXUD/YeEMUkQ/u7aJGJgiXOwD+6cImWA=; b=VbpHOD4gxhDXgIHB6oZRi6eaGTxluHoYUns1xvGPZyHsmPUAISvhnA4QHy5yiISkJ9HgxmMp8gQq7m3BeTD6AU5RPjkv4cA/V4QDY1ryJjl8G0DEExjsNEiJoMhjt0EDLAVaRj8enbjFGqX3QjaYGN+nXikRjaz7gngQR7YTT8M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919720198447.68048405063973; Tue, 4 Oct 2022 14:42:00 -0700 (PDT) Received: from localhost ([::1]:48626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpfp-0004YZ-FI for importer@patchew.org; Tue, 04 Oct 2022 17:41:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLa-0006Nm-2I for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:03 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:39905) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLX-0002MJ-Ln for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=bMICiGG7wF5iXUD/YeEMUkQ/u7aJGJgiXOwD+6cImWA=; b=kySWV HYgrNC5KtCmE+imrrwnmT3Bxu6gRkxlhl7JOtZ5OHEA6GXmy/vit3KZyuHftuxrWhGlFeBprteyyh XPfZMXyq4nln4jZpGJsHfCFcsgOGIB/4ZPgtfeL8dPvNiCXMI6mqSl3ji47Z0nqO8HxZ/0xsKM8hq D5mWmdoG2OMOvwM291VFqS/u7REcWUm3hTW815dYkpCHV+Ik1InNc7WObwk8Lz3R22NQehWZELWyX evzFa/r8s9IlGXVzuzOGiG2I97BFhjniOQtUUSVNlaBFMaXtKMkaPt3iQLzDFWvkT7+8JV6F0sY5Y cXJ6vITBuXii/Avt6n/rWd5vadnzw==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:47 +0200 Subject: [PATCH 08/20] tests/9p: convert v9fs_treaddir() to declarative arguments To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=a66aae4ceb19ec12d245b8c7f33a639584c8e272@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919723015100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use declarative function arguments for function v9fs_treaddir(). Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 32 ++++++++++++++++++++------ tests/qtest/libqos/virtio-9p-client.h | 33 +++++++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 11 +++++++-- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 29916a23b5..047c8993b6 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -557,17 +557,35 @@ void v9fs_rgetattr(P9Req *req, v9fs_attr *attr) } =20 /* size[4] Treaddir tag[2] fid[4] offset[8] count[4] */ -P9Req *v9fs_treaddir(QVirtio9P *v9p, uint32_t fid, uint64_t offset, - uint32_t count, uint16_t tag) +TReadDirRes v9fs_treaddir(TReadDirOpt opt) { P9Req *req; + uint32_t err; =20 - req =3D v9fs_req_init(v9p, 4 + 8 + 4, P9_TREADDIR, tag); - v9fs_uint32_write(req, fid); - v9fs_uint64_write(req, offset); - v9fs_uint32_write(req, count); + g_assert(opt.client); + /* expecting either Rreaddir or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !(opt.rreaddir.count || + opt.rreaddir.nentries || opt.rreaddir.entries)); + + req =3D v9fs_req_init(opt.client, 4 + 8 + 4, P9_TREADDIR, opt.tag); + v9fs_uint32_write(req, opt.fid); + v9fs_uint64_write(req, opt.offset); + v9fs_uint32_write(req, opt.count); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rreaddir(req, opt.rreaddir.count, opt.rreaddir.nentries, + opt.rreaddir.entries); + } + req =3D NULL; /* request was freed */ + } + + return (TReadDirRes) { .req =3D req }; } =20 /* size[4] Rreaddir tag[2] count[4] data[count] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index f7b1bfc79a..2bf649085f 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -182,6 +182,36 @@ typedef struct TGetAttrRes { P9Req *req; } TGetAttrRes; =20 +/* options for 'Treaddir' 9p request */ +typedef struct TReadDirOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* file ID of directory whose entries shall be retrieved (required) */ + uint32_t fid; + /* offset in entries stream, i.e. for multiple requests (optional) */ + uint64_t offset; + /* maximum bytes to be returned by server (required) */ + uint32_t count; + /* data being received from 9p server as 'Rreaddir' response (optional= ) */ + struct { + uint32_t *count; + uint32_t *nentries; + struct V9fsDirent **entries; + } rreaddir; + /* only send Treaddir request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TReadDirOpt; + +/* result of 'Treaddir' 9p request */ +typedef struct TReadDirRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TReadDirRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -211,8 +241,7 @@ TWalkRes v9fs_twalk(TWalkOpt opt); void v9fs_rwalk(P9Req *req, uint16_t *nwqid, v9fs_qid **wqid); TGetAttrRes v9fs_tgetattr(TGetAttrOpt); void v9fs_rgetattr(P9Req *req, v9fs_attr *attr); -P9Req *v9fs_treaddir(QVirtio9P *v9p, uint32_t fid, uint64_t offset, - uint32_t count, uint16_t tag); +TReadDirRes v9fs_treaddir(TReadDirOpt); void v9fs_rreaddir(P9Req *req, uint32_t *count, uint32_t *nentries, struct V9fsDirent **entries); void v9fs_free_dirents(struct V9fsDirent *e); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index ae1220d0cb..e5c174c218 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -20,6 +20,7 @@ #define tversion(...) v9fs_tversion((TVersionOpt) __VA_ARGS__) #define tattach(...) v9fs_tattach((TAttachOpt) __VA_ARGS__) #define tgetattr(...) v9fs_tgetattr((TGetAttrOpt) __VA_ARGS__) +#define treaddir(...) v9fs_treaddir((TReadDirOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -119,7 +120,10 @@ static void fs_readdir(void *obj, void *data, QGuestAl= locator *t_alloc) /* * submit count =3D msize - 11, because 11 is the header size of Rread= dir */ - req =3D v9fs_treaddir(v9p, 1, 0, P9_MAX_SIZE - 11, 0); + req =3D treaddir({ + .client =3D v9p, .fid =3D 1, .offset =3D 0, .count =3D P9_MAX_SIZE= - 11, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rreaddir(req, &count, &nentries, &entries); =20 @@ -186,7 +190,10 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t = count) npartialentries =3D 0; partialentries =3D NULL; =20 - req =3D v9fs_treaddir(v9p, fid, offset, count, 0); + req =3D treaddir({ + .client =3D v9p, .fid =3D fid, .offset =3D offset, .count =3D = count, + .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rreaddir(req, &count, &npartialentries, &partialentries); if (npartialentries > 0 && partialentries) { --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664918838; cv=none; d=zohomail.com; s=zohoarc; b=kGscvJsBlHTqrRj9QcsXL5twpUSgL6PjD8u4HwOyu3nqxsQowoRW5E2hiTU/l3ZV8rQyi3TR+/aYNZeIxzMZJ0isKfmbazWZWiCbSJ5XLpfHJpVkQ1E4tebXaAF6sjEO/QcA8j+VgkTUp1uh9vDtlRLgLM+lwIaxZ7Kcol3zWjI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664918838; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=4BKsSAzFh4jWfH6Bn/dB18kUVyc8B23ILU+mBIPR2zU=; b=GX1sRFGMsUXxE0pb076t++PXJmwR17I8lb/CmfYYayMsJSdKou03TPFuykl67Ii5Z7IjsjQFGu6emJTfhPHemR2/3wIfydbojjcjXdvKRAPht1w+AsMx7x8bRgMJVLwkq+4F8vm4Wsgz7xiJoCfZS1JPavl1wSndpF90ZGYGjVo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664918838470429.4913860419051; Tue, 4 Oct 2022 14:27:18 -0700 (PDT) Received: from localhost ([::1]:55534 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpRc-0007DG-I2 for importer@patchew.org; Tue, 04 Oct 2022 17:27:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <7cec6f2c7011a481806c34908893b7282702a7a6@lizzy.crudebyte.com>) id 1ofpLj-0006PK-My for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:13 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:45333) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <7cec6f2c7011a481806c34908893b7282702a7a6@lizzy.crudebyte.com>) id 1ofpLg-0002XL-Vu for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=4BKsSAzFh4jWfH6Bn/dB18kUVyc8B23ILU+mBIPR2zU=; b=B9wtH 9QvdyxSMG/1tMewZvfuOK/WHCyUSf8Th3gzHQvrhTF69nVq86yxoniNk+l2n48ItVza2ogblykINR pkjXTHtzRM45Pm1/BrIr4oyTAcadYMQETZiPbd69avmDIRrkxuaWSKSRuxXtCfvJ16Fm/BNoaeL28 cOQBQR4VOkGrpolytCvDQGmNLcLMnw7ajxgdbOMyFSLa8JOBzuzG1AbYJ2TtBFlHz7nh9WHKQk1qz lD4KSasAxc9+1i3yNlohHKEEkDKrc+LRYfv1FBNQ8tRCKsx8HR696fBDU3r5HZY9fux/lqDnqEfG7 86cnPguSrr8mFWEM85cG5WPgYcA+Q==; Message-Id: <7cec6f2c7011a481806c34908893b7282702a7a6.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:49 +0200 Subject: [PATCH 09/20] tests/9p: simplify callers of treaddir() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=7cec6f2c7011a481806c34908893b7282702a7a6@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664918839729100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now as treaddir() is using a declarative approach, simplify the code of callers of this function. Signed-off-by: Christian Schoenebeck --- tests/qtest/virtio-9p-test.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index e5c174c218..99e24fce0b 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -120,12 +120,12 @@ static void fs_readdir(void *obj, void *data, QGuestA= llocator *t_alloc) /* * submit count =3D msize - 11, because 11 is the header size of Rread= dir */ - req =3D treaddir({ + treaddir({ .client =3D v9p, .fid =3D 1, .offset =3D 0, .count =3D P9_MAX_SIZE= - 11, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rreaddir(req, &count, &nentries, &entries); + .rreaddir =3D { + .count =3D &count, .nentries =3D &nentries, .entries =3D &entr= ies + } + }); =20 /* * Assuming msize (P9_MAX_SIZE) is large enough so we can retrieve all @@ -190,12 +190,13 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t= count) npartialentries =3D 0; partialentries =3D NULL; =20 - req =3D treaddir({ + treaddir({ .client =3D v9p, .fid =3D fid, .offset =3D offset, .count =3D = count, - .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rreaddir(req, &count, &npartialentries, &partialentries); + .rreaddir =3D { + .count =3D &count, .nentries =3D &npartialentries, + .entries =3D &partialentries + } + }); if (npartialentries > 0 && partialentries) { if (!entries) { entries =3D partialentries; --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919166; cv=none; d=zohomail.com; s=zohoarc; b=hcl++suYtLLFoMTK6D+Xo6Cj+/p15G/mZKQVjf9h6fYq93i/YG8UT+i7GPlTqZXmOpDhSD12iI7oUy+GkLGPaGjMPjtLC2vbeIW2Ou73acVl/GeWB0Fe6mNL22RYCxQiRJthhNkHS4EnPZeOOAcZLEy9HwGP+D+9FcO7WoUojYc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919166; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=i0w2g9Byfz1BsGSKTqMfbBLzWPKISsiW9dpP14uYURA=; b=hkZK9B6mcwW3wNT082VqNTIRC30mG72YAl2oiCDazx4HPkUhiCzaSa9fqLDe0vg21eL3GkIJvOZrbqBFK1v4qs8/FCaj97BkjCkNUopfvbkSUuyouDjWs6/lrSvjLSJjEH4Ea+8RBTdksoZAbfSe9316zVQgs9Sb1XrJCLshvwU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919166485792.214691588364; Tue, 4 Oct 2022 14:32:46 -0700 (PDT) Received: from localhost ([::1]:46260 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpWs-0005Hj-JE for importer@patchew.org; Tue, 04 Oct 2022 17:32:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <765ab515353c56f88f0a163631f626a44e9565d6@lizzy.crudebyte.com>) id 1ofpLr-0006Qf-4R for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:19 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:43379) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <765ab515353c56f88f0a163631f626a44e9565d6@lizzy.crudebyte.com>) id 1ofpLm-0002Xy-3e for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=i0w2g9Byfz1BsGSKTqMfbBLzWPKISsiW9dpP14uYURA=; b=WwmOb JTk7yyPKZtiALnnc/IQmBOfIH9wLnXX6JPvWRrhlzoID+20rigWj8cYKnwPOxa4ZOH3PQpfBf+TOl MS8/nqAUqLtubIjvP+qz2XQJgjc2fCMXuABrC02kWNDEiahFcN7L/+W3rrh6YaMpWlZvId1aAWikN eRXyRNeooU2C7R/gtBS76jQi9gvx/mDrwumcvxI6TDYpssKhMrpYfgaLknCmiq+zNcFdDZr4uvrpG F8ZwZfyX4NoeBj1H9aP8ipYqyThPFMY/ZgLAmlqMudR2uWXVbzV2rNRrxBnEM6KbM4hDkJ6QJsMzo xj3diylRMga7VeqJEIC2EpbbszI+g==; Message-Id: <765ab515353c56f88f0a163631f626a44e9565d6.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:52 +0200 Subject: [PATCH 10/20] tests/9p: convert v9fs_tlopen() to declarative arguments To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=765ab515353c56f88f0a163631f626a44e9565d6@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919167419100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use declarative function arguments for function v9fs_tlopen(). Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 28 +++++++++++++++++++------ tests/qtest/libqos/virtio-9p-client.h | 30 +++++++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 25 ++++++++++++++++------ 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 047c8993b6..15fde54d63 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -643,16 +643,32 @@ void v9fs_free_dirents(struct V9fsDirent *e) } =20 /* size[4] Tlopen tag[2] fid[4] flags[4] */ -P9Req *v9fs_tlopen(QVirtio9P *v9p, uint32_t fid, uint32_t flags, - uint16_t tag) +TLOpenRes v9fs_tlopen(TLOpenOpt opt) { P9Req *req; + uint32_t err; =20 - req =3D v9fs_req_init(v9p, 4 + 4, P9_TLOPEN, tag); - v9fs_uint32_write(req, fid); - v9fs_uint32_write(req, flags); + g_assert(opt.client); + /* expecting either Rlopen or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !(opt.rlopen.qid || opt.rlopen.iounit)); + + req =3D v9fs_req_init(opt.client, 4 + 4, P9_TLOPEN, opt.tag); + v9fs_uint32_write(req, opt.fid); + v9fs_uint32_write(req, opt.flags); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rlopen(req, opt.rlopen.qid, opt.rlopen.iounit); + } + req =3D NULL; /* request was freed */ + } + + return (TLOpenRes) { .req =3D req }; } =20 /* size[4] Rlopen tag[2] qid[13] iounit[4] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index 2bf649085f..3b70aef51e 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -212,6 +212,33 @@ typedef struct TReadDirRes { P9Req *req; } TReadDirRes; =20 +/* options for 'Tlopen' 9p request */ +typedef struct TLOpenOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* file ID of file / directory to be opened (required) */ + uint32_t fid; + /* Linux open(2) flags such as O_RDONLY, O_RDWR, O_WRONLY (optional) */ + uint32_t flags; + /* data being received from 9p server as 'Rlopen' response (optional) = */ + struct { + v9fs_qid *qid; + uint32_t *iounit; + } rlopen; + /* only send Tlopen request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TLOpenOpt; + +/* result of 'Tlopen' 9p request */ +typedef struct TLOpenRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TLOpenRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -245,8 +272,7 @@ TReadDirRes v9fs_treaddir(TReadDirOpt); void v9fs_rreaddir(P9Req *req, uint32_t *count, uint32_t *nentries, struct V9fsDirent **entries); void v9fs_free_dirents(struct V9fsDirent *e); -P9Req *v9fs_tlopen(QVirtio9P *v9p, uint32_t fid, uint32_t flags, - uint16_t tag); +TLOpenRes v9fs_tlopen(TLOpenOpt); void v9fs_rlopen(P9Req *req, v9fs_qid *qid, uint32_t *iounit); P9Req *v9fs_twrite(QVirtio9P *v9p, uint32_t fid, uint64_t offset, uint32_t count, const void *data, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 99e24fce0b..0455c3a094 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -21,6 +21,7 @@ #define tattach(...) v9fs_tattach((TAttachOpt) __VA_ARGS__) #define tgetattr(...) v9fs_tgetattr((TGetAttrOpt) __VA_ARGS__) #define treaddir(...) v9fs_treaddir((TReadDirOpt) __VA_ARGS__) +#define tlopen(...) v9fs_tlopen((TLOpenOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -113,7 +114,9 @@ static void fs_readdir(void *obj, void *data, QGuestAll= ocator *t_alloc) }); g_assert_cmpint(nqid, =3D=3D, 1); =20 - req =3D v9fs_tlopen(v9p, 1, O_DIRECTORY, 0); + req =3D tlopen({ + .client =3D v9p, .fid =3D 1, .flags =3D O_DIRECTORY, .requestOnly = =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlopen(req, &qid, NULL); =20 @@ -178,7 +181,9 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t c= ount) }); g_assert_cmpint(nqid, =3D=3D, 1); =20 - req =3D v9fs_tlopen(v9p, fid, O_DIRECTORY, 0); + req =3D tlopen({ + .client =3D v9p, .fid =3D fid, .flags =3D O_DIRECTORY, .requestOnl= y =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlopen(req, &qid, NULL); =20 @@ -365,7 +370,9 @@ static void fs_lopen(void *obj, void *data, QGuestAlloc= ator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); + req =3D tlopen({ + .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlopen(req, NULL, NULL); =20 @@ -387,7 +394,9 @@ static void fs_write(void *obj, void *data, QGuestAlloc= ator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); + req =3D tlopen({ + .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlopen(req, NULL, NULL); =20 @@ -413,7 +422,9 @@ static void fs_flush_success(void *obj, void *data, QGu= estAllocator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); + req =3D tlopen({ + .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlopen(req, NULL, NULL); =20 @@ -450,7 +461,9 @@ static void fs_flush_ignored(void *obj, void *data, QGu= estAllocator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D v9fs_tlopen(v9p, 1, O_WRONLY, 0); + req =3D tlopen({ + .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rlopen(req, NULL, NULL); =20 --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919212; cv=none; d=zohomail.com; s=zohoarc; b=imLGFi4mDqSfFKBe2aYSjZX3mF2FN4Cm9L2eFUzsHvG0eesFa0OeCs9h7irQOrXvihOZJuS28zfCS5uvBZPJmaPP4eLX6Y/OzuGqKkpU1AXfmWvoqFOPD/Mzc0f3qbof+iRENfEAC3dhOW4amimHUaF6ZUbbIIqY1ZMFf5g5K+o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919212; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=js3NqUShX2HmMP302fS7mpsznxWt2G6ATCcJIiVI388=; b=Zkx6uKywd7lrbTalff62P8xIxFPPGPKGe5ZmFjU29bWTtBTcAO8BckiT94UefLDURxlF6kPOJRoJ1OeHdUJWBwJ+kOfF14+gDW/HmuZmnDXaleEt+XkQzGE3WEg7OzgAL16eiAbCgvur5ES81jsaLKouyYJys86krbV7kYEwK4k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 166491921254332.476472880881374; Tue, 4 Oct 2022 14:33:32 -0700 (PDT) Received: from localhost ([::1]:46264 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpXc-0005US-JE for importer@patchew.org; Tue, 04 Oct 2022 17:33:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33726) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLu-0006SZ-9M for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:22 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:39817) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLr-0002ZY-ND for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=js3NqUShX2HmMP302fS7mpsznxWt2G6ATCcJIiVI388=; b=YYpNE dua/mKkXQC5Wcla2XUM/HbPLJ9/ZdwjrCpCHqfTJT3DUipyGxBLxGhS+nKtG9AEwh/4F63YwU9Rb9 d2dgP/R0nEjuwizgdkB9I428T8g7l2Pdefsnsr53D3SsX7U0OHiAOrrEOddHnMPwkAUnHJ2fcgoM/ 0+6jv2N4ClE4lJdswmpaKR3rO4pCQsldwffyjJaSMFAAHVG5u4ShUDzN/SfIhkkCVySyR1hDetdNW 7R8dJvv/ABo2P/L+mN79tiUwbn2F/pVUs5DrtVEIdcPw8Jpe3qjr8ex5cfznmPNg2+QfCsALUAVQA A9Ahma5gAYeLR7ZgTjTpkvfO3FaLg==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:55 +0200 Subject: [PATCH 11/20] tests/9p: simplify callers of tlopen() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=f74b6153e079fc7a340e5cb575ee32e0fe1e0ae6@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919214355100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now as tlopen() is using a declarative approach, simplify the code of callers of this function. Signed-off-by: Christian Schoenebeck --- tests/qtest/virtio-9p-test.c | 43 +++++++++--------------------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 0455c3a094..60a030b877 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -105,7 +105,6 @@ static void fs_readdir(void *obj, void *data, QGuestAll= ocator *t_alloc) v9fs_qid qid; uint32_t count, nentries; struct V9fsDirent *entries =3D NULL; - P9Req *req; =20 tattach({ .client =3D v9p }); twalk({ @@ -114,11 +113,9 @@ static void fs_readdir(void *obj, void *data, QGuestAl= locator *t_alloc) }); g_assert_cmpint(nqid, =3D=3D, 1); =20 - req =3D tlopen({ - .client =3D v9p, .fid =3D 1, .flags =3D O_DIRECTORY, .requestOnly = =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlopen(req, &qid, NULL); + tlopen({ + .client =3D v9p, .fid =3D 1, .flags =3D O_DIRECTORY, .rlopen.qid = =3D &qid + }); =20 /* * submit count =3D msize - 11, because 11 is the header size of Rread= dir @@ -163,7 +160,6 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t c= ount) v9fs_qid qid; uint32_t nentries, npartialentries; struct V9fsDirent *entries, *tail, *partialentries; - P9Req *req; int fid; uint64_t offset; =20 @@ -181,11 +177,9 @@ static void do_readdir_split(QVirtio9P *v9p, uint32_t = count) }); g_assert_cmpint(nqid, =3D=3D, 1); =20 - req =3D tlopen({ - .client =3D v9p, .fid =3D fid, .flags =3D O_DIRECTORY, .requestOnl= y =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlopen(req, &qid, NULL); + tlopen({ + .client =3D v9p, .fid =3D fid, .flags =3D O_DIRECTORY, .rlopen.qid= =3D &qid + }); =20 /* * send as many Treaddir requests as required to get all directory @@ -363,18 +357,13 @@ static void fs_lopen(void *obj, void *data, QGuestAll= ocator *t_alloc) QVirtio9P *v9p =3D obj; v9fs_set_allocator(t_alloc); char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_LOPEN_FILE) }; - P9Req *req; =20 tattach({ .client =3D v9p }); twalk({ .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D tlopen({ - .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlopen(req, NULL, NULL); + tlopen({ .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY }); =20 g_free(wnames[0]); } @@ -394,11 +383,7 @@ static void fs_write(void *obj, void *data, QGuestAllo= cator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D tlopen({ - .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlopen(req, NULL, NULL); + tlopen({ .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY }); =20 req =3D v9fs_twrite(v9p, 1, 0, write_count, buf, 0); v9fs_req_wait_for_reply(req, NULL); @@ -422,11 +407,7 @@ static void fs_flush_success(void *obj, void *data, QG= uestAllocator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D tlopen({ - .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlopen(req, NULL, NULL); + tlopen({ .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY }); =20 /* This will cause the 9p server to try to write data to the backend, * until the write request gets cancelled. @@ -461,11 +442,7 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) .client =3D v9p, .fid =3D 0, .newfid =3D 1, .nwname =3D 1, .wnames= =3D wnames }); =20 - req =3D tlopen({ - .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY, .requestOnly =3D= true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlopen(req, NULL, NULL); + tlopen({ .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY }); =20 /* This will cause the write request to complete right away, before it * could be actually cancelled. --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919269; cv=none; d=zohomail.com; s=zohoarc; b=gi0catlzKSBprIrbxUZFRr/PYUyUXz0EcOhNZW5UmS3zSKDmop2hmOHcW7fpefF55Bv+SF3fWgDC2gnqu/n5XywyUUEb1UZw0lRt3wtctPLqQzfs7y/XNr4jEs6CanDlv/33RHsWDk6WnIV0qquLy6IKaB10o0PM3oLxSRJKK0w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919269; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=SVf+oYt3l3p/LFktrYdUrJA/tAxtu+lowixQuIDBesI=; b=F3BAu9IU/DlujFskG14i9cR97L+M1noM/rfs059YYWQ9qAoY1iVzM+T1hFH/e5vKDTCge9osfUAM+p4+d3VInXY5AvD2K0DbbcpDCOLcsTjsIhL2jCs1MZUk9+lsrO1ZcyqboAtiAK6e7e68AVxD29WYMv80dsexATraRCdTVhc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919269794306.3872352048231; Tue, 4 Oct 2022 14:34:29 -0700 (PDT) Received: from localhost ([::1]:44216 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpYa-0005pi-Hb for importer@patchew.org; Tue, 04 Oct 2022 17:34:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37206) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLz-0006Yo-Uq for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:30 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:37515) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpLx-0002d3-RQ for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=SVf+oYt3l3p/LFktrYdUrJA/tAxtu+lowixQuIDBesI=; b=YSN1r UgGBMR52LAwSIn9OTzSgO2Wd2B2IHamt8sTBT02q8nmFKpH/9Gbf3tA6CScJYOxmjuKUArFPDHR2c 137gjJK2ATyPEfjHam0Su1ARPG59g8WcKDqDnFn66lNHumdDym1YUTKkNLjBf1R+8ne2uHyG15wat en3f0t4ysRnnP/JT2ZbNfxJlchYZxpkBlGyWs2BEAiwih3sifP5eTDgb8Qd4o4H1bzGJDqK/hLqLe IqwG+J7uk8yCk27JQiAMmcmnhQOsaZLzRkPoATXKlWVZP7NbK5mi6sL6Akcxeuy7bBl1UqbnZP4Fw +/dZMY1ZzmNH+PTuiWDpNTCwCJ8YA==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:53:58 +0200 Subject: [PATCH 12/20] tests/9p: convert v9fs_twrite() to declarative arguments To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=be0326e2d9ab66f68c06b1766ddf103849d570b4@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919270594100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use declarative function arguments for function v9fs_twrite(). Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 38 ++++++++++++++++++++------- tests/qtest/libqos/virtio-9p-client.h | 31 ++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 18 ++++++++++--- 3 files changed, 72 insertions(+), 15 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 15fde54d63..9ae347fad5 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -687,21 +687,39 @@ void v9fs_rlopen(P9Req *req, v9fs_qid *qid, uint32_t = *iounit) } =20 /* size[4] Twrite tag[2] fid[4] offset[8] count[4] data[count] */ -P9Req *v9fs_twrite(QVirtio9P *v9p, uint32_t fid, uint64_t offset, - uint32_t count, const void *data, uint16_t tag) +TWriteRes v9fs_twrite(TWriteOpt opt) { P9Req *req; + uint32_t err; uint32_t body_size =3D 4 + 8 + 4; + uint32_t written =3D 0; =20 - g_assert_cmpint(body_size, <=3D, UINT32_MAX - count); - body_size +=3D count; - req =3D v9fs_req_init(v9p, body_size, P9_TWRITE, tag); - v9fs_uint32_write(req, fid); - v9fs_uint64_write(req, offset); - v9fs_uint32_write(req, count); - v9fs_memwrite(req, data, count); + g_assert(opt.client); + + g_assert_cmpint(body_size, <=3D, UINT32_MAX - opt.count); + body_size +=3D opt.count; + req =3D v9fs_req_init(opt.client, body_size, P9_TWRITE, opt.tag); + v9fs_uint32_write(req, opt.fid); + v9fs_uint64_write(req, opt.offset); + v9fs_uint32_write(req, opt.count); + v9fs_memwrite(req, opt.data, opt.count); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rwrite(req, &written); + } + req =3D NULL; /* request was freed */ + } + + return (TWriteRes) { + .req =3D req, + .count =3D written + }; } =20 /* size[4] Rwrite tag[2] count[4] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index 3b70aef51e..dda371c054 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -239,6 +239,34 @@ typedef struct TLOpenRes { P9Req *req; } TLOpenRes; =20 +/* options for 'Twrite' 9p request */ +typedef struct TWriteOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* file ID of file to write to (required) */ + uint32_t fid; + /* start position of write from beginning of file (optional) */ + uint64_t offset; + /* how many bytes to write */ + uint32_t count; + /* data to be written */ + const void *data; + /* only send Twrite request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TWriteOpt; + +/* result of 'Twrite' 9p request */ +typedef struct TWriteRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; + /* amount of bytes written */ + uint32_t count; +} TWriteRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -274,8 +302,7 @@ void v9fs_rreaddir(P9Req *req, uint32_t *count, uint32_= t *nentries, void v9fs_free_dirents(struct V9fsDirent *e); TLOpenRes v9fs_tlopen(TLOpenOpt); void v9fs_rlopen(P9Req *req, v9fs_qid *qid, uint32_t *iounit); -P9Req *v9fs_twrite(QVirtio9P *v9p, uint32_t fid, uint64_t offset, - uint32_t count, const void *data, uint16_t tag); +TWriteRes v9fs_twrite(TWriteOpt); void v9fs_rwrite(P9Req *req, uint32_t *count); P9Req *v9fs_tflush(QVirtio9P *v9p, uint16_t oldtag, uint16_t tag); void v9fs_rflush(P9Req *req); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 60a030b877..a5b9284acb 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -22,6 +22,7 @@ #define tgetattr(...) v9fs_tgetattr((TGetAttrOpt) __VA_ARGS__) #define treaddir(...) v9fs_treaddir((TReadDirOpt) __VA_ARGS__) #define tlopen(...) v9fs_tlopen((TLOpenOpt) __VA_ARGS__) +#define twrite(...) v9fs_twrite((TWriteOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -385,7 +386,10 @@ static void fs_write(void *obj, void *data, QGuestAllo= cator *t_alloc) =20 tlopen({ .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY }); =20 - req =3D v9fs_twrite(v9p, 1, 0, write_count, buf, 0); + req =3D twrite({ + .client =3D v9p, .fid =3D 1, .offset =3D 0, .count =3D write_count, + .data =3D buf, .requestOnly =3D true + }).req; v9fs_req_wait_for_reply(req, NULL); v9fs_rwrite(req, &count); g_assert_cmpint(count, =3D=3D, write_count); @@ -413,7 +417,11 @@ static void fs_flush_success(void *obj, void *data, QG= uestAllocator *t_alloc) * until the write request gets cancelled. */ should_block =3D 1; - req =3D v9fs_twrite(v9p, 1, 0, sizeof(should_block), &should_block, 0); + req =3D twrite({ + .client =3D v9p, .fid =3D 1, .offset =3D 0, + .count =3D sizeof(should_block), .data =3D &should_block, + .requestOnly =3D true + }).req; =20 flush_req =3D v9fs_tflush(v9p, req->tag, 1); =20 @@ -448,7 +456,11 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) * could be actually cancelled. */ should_block =3D 0; - req =3D v9fs_twrite(v9p, 1, 0, sizeof(should_block), &should_block, 0); + req =3D twrite({ + .client =3D v9p, .fid =3D 1, .offset =3D 0, + .count =3D sizeof(should_block), .data =3D &should_block, + .requestOnly =3D true + }).req; =20 flush_req =3D v9fs_tflush(v9p, req->tag, 1); =20 --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664920055; cv=none; d=zohomail.com; s=zohoarc; b=nYdXGloujrXMHxCY9uuYQmiuq73owuodGlYT1B3+8mwZb5oqsbjpj431s03gMSLwmIkYdwYYPyQGC6/D+QirI3UIZRpm8T1DWWK2zYJZp4j1fFOFTK36eLMb5J/cjQI439nxp7WE1etg9pJ7+3zh9pyl0wDP1V8eev7TInP3xSs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664920055; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=ebz7OqktTkES3rzVSDqZI3+/Vs/u+VUQJpyPQL0qwdw=; b=Ws/RIthKS8rb5whv3qIHZo4KDSOEyxkxpRkNcKCYPWaQDuk7Vr2Ke4Z0zs6b1yiDKUsDgeO9YNzaf7iWOlfLu4ILy+lA6f82j64LFAs0IYBaJCDdNX37bMNsnaMDWfGGcItkIl7qZqLTZ0eHCo2sbTySkzl22ri+Pwr6kA3ne4g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664920055249798.7545953594819; Tue, 4 Oct 2022 14:47:35 -0700 (PDT) Received: from localhost ([::1]:59444 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofplG-00039a-3L for importer@patchew.org; Tue, 04 Oct 2022 17:47:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35568) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <7f280ec6a1f9d8afed46567a796562c4dc28afa9@lizzy.crudebyte.com>) id 1ofpM8-0006od-2i for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:36 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:33525) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <7f280ec6a1f9d8afed46567a796562c4dc28afa9@lizzy.crudebyte.com>) id 1ofpM6-0002fg-GQ for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=ebz7OqktTkES3rzVSDqZI3+/Vs/u+VUQJpyPQL0qwdw=; b=CUxel YxupZszmmeHnmucqejrMTtMnkOFLizHMVW/peL7wYbw5lD4yP4czdeT7xYLa5TRbN27HFwVuzdHIk rECGN6lESx5ROnfjIHRmnaoGl/f/bO+tEu2YPOb0Bps9D86899krK1MFVoHAYjzrxeCH+gYTfPtdm ynRuIlUeyQqXUKU5yPm3faur/RMm5YwkhInud0ZV8EAk5Dnbn58cA1Emi+an7WDn/g6Z8KVlb+15p 2dsw9wBbf9xNRG4VdtIl8WTSLvQ+tk+XmwySG5ANHLzpyzjFpR2+s4NA2k/TuNYpCILjK3LUYzQtX WatI+ospqlX8rOvMpK2I6bczwP2jA==; Message-Id: <7f280ec6a1f9d8afed46567a796562c4dc28afa9.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:00 +0200 Subject: [PATCH 13/20] tests/9p: simplify callers of twrite() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=7f280ec6a1f9d8afed46567a796562c4dc28afa9@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664920057134100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now as twrite() is using a declarative approach, simplify the code of callers of this function. Signed-off-by: Christian Schoenebeck --- tests/qtest/virtio-9p-test.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index a5b9284acb..5ad7bebec7 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -377,7 +377,6 @@ static void fs_write(void *obj, void *data, QGuestAlloc= ator *t_alloc) char *wnames[] =3D { g_strdup(QTEST_V9FS_SYNTH_WRITE_FILE) }; g_autofree char *buf =3D g_malloc0(write_count); uint32_t count; - P9Req *req; =20 tattach({ .client =3D v9p }); twalk({ @@ -386,12 +385,10 @@ static void fs_write(void *obj, void *data, QGuestAll= ocator *t_alloc) =20 tlopen({ .client =3D v9p, .fid =3D 1, .flags =3D O_WRONLY }); =20 - req =3D twrite({ + count =3D twrite({ .client =3D v9p, .fid =3D 1, .offset =3D 0, .count =3D write_count, - .data =3D buf, .requestOnly =3D true - }).req; - v9fs_req_wait_for_reply(req, NULL); - v9fs_rwrite(req, &count); + .data =3D buf + }).count; g_assert_cmpint(count, =3D=3D, write_count); =20 g_free(wnames[0]); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919721; cv=none; d=zohomail.com; s=zohoarc; b=gfk6mb+xTtCwW8lVr9agpr0DNe7H06H3y5p+IqxAIUEa8UfxoE/TTjxwkbHlKSnFJyPfGx6lS/2b0U9xtutYJgS42qpw53m9kQFe593bl8nHjjU2vNnpmskpeIfGTktFFnu42dtNVWYTK7FUUNByQ2erIc71fvYlGT46UISGUHE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919721; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=mCn9OQoiGj19Bem+bv9rFYl0EMPaS3hg2xQl8kC6GbU=; b=ir0RPG6+v9Y0waSzpSH1plLnmCFddvAJNYVKJXIIlrYH4GEE1UFAK8+WfJOG6XESaSSVZoJHtQ+36AaDIOvZb8dxq8tSOPZyWnCtbDOciuV3+Zk1GwqGDfiPuixMYVduQLFdAOi6dPBkJeaqzECH59DRT2RrVt1mCOJlWvh1pEg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919721708433.4003219833427; Tue, 4 Oct 2022 14:42:01 -0700 (PDT) Received: from localhost ([::1]:55308 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpfr-0004pl-5q for importer@patchew.org; Tue, 04 Oct 2022 17:41:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35570) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <91b7b154298c500d100b05137146c2905c3acdec@lizzy.crudebyte.com>) id 1ofpME-00072N-7I for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:43 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:42677) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <91b7b154298c500d100b05137146c2905c3acdec@lizzy.crudebyte.com>) id 1ofpMB-0002gL-GI for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=mCn9OQoiGj19Bem+bv9rFYl0EMPaS3hg2xQl8kC6GbU=; b=SQoHi XzhEjRWJsgBI1oJADPWH9W/Uit/UCH5aISUXoiwI8G/DQYakAmOpGcM1F8VdpVvVrUSmc+ruUHVnH 2OsUgDrcuQSZlahLpSrkqKNH4v4dnq3v8euSuXiPPpqbpfw65AcT5EcpaYkfbIFkPEjuUbzp1zyX3 VvLKg+ClMbCGsFow5Im7e8iamcMPHhuCs1TbqHreIFvVmqcpso3wKgocIv6U51wWMjOwdxwZkv1Wk 9onBR6azAe8Hg57s0vyCnjaesL6NhojjqndgGA7N9fsn7zY6ZnaXJQq0l98NWrLOqhaSWeSM61mZm 0uoRBxOw0bgo/WeoxfS+Qd79ALjJg==; Message-Id: <91b7b154298c500d100b05137146c2905c3acdec.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:03 +0200 Subject: [PATCH 14/20] tests/9p: convert v9fs_tflush() to declarative arguments To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=91b7b154298c500d100b05137146c2905c3acdec@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919722220100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use declarative function arguments for function v9fs_tflush(). Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 23 +++++++++++++++++++---- tests/qtest/libqos/virtio-9p-client.h | 22 +++++++++++++++++++++- tests/qtest/virtio-9p-test.c | 9 +++++++-- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 9ae347fad5..3be0ffc7da 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -733,14 +733,29 @@ void v9fs_rwrite(P9Req *req, uint32_t *count) } =20 /* size[4] Tflush tag[2] oldtag[2] */ -P9Req *v9fs_tflush(QVirtio9P *v9p, uint16_t oldtag, uint16_t tag) +TFlushRes v9fs_tflush(TFlushOpt opt) { P9Req *req; + uint32_t err; =20 - req =3D v9fs_req_init(v9p, 2, P9_TFLUSH, tag); - v9fs_uint32_write(req, oldtag); + g_assert(opt.client); + + req =3D v9fs_req_init(opt.client, 2, P9_TFLUSH, opt.tag); + v9fs_uint32_write(req, opt.oldtag); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rflush(req); + } + req =3D NULL; /* request was freed */ + } + + return (TFlushRes) { .req =3D req }; } =20 /* size[4] Rflush tag[2] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index dda371c054..b22b54c720 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -267,6 +267,26 @@ typedef struct TWriteRes { uint32_t count; } TWriteRes; =20 +/* options for 'Tflush' 9p request */ +typedef struct TFlushOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* message to flush (required) */ + uint16_t oldtag; + /* only send Tflush request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TFlushOpt; + +/* result of 'Tflush' 9p request */ +typedef struct TFlushRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TFlushRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -304,7 +324,7 @@ TLOpenRes v9fs_tlopen(TLOpenOpt); void v9fs_rlopen(P9Req *req, v9fs_qid *qid, uint32_t *iounit); TWriteRes v9fs_twrite(TWriteOpt); void v9fs_rwrite(P9Req *req, uint32_t *count); -P9Req *v9fs_tflush(QVirtio9P *v9p, uint16_t oldtag, uint16_t tag); +TFlushRes v9fs_tflush(TFlushOpt); void v9fs_rflush(P9Req *req); P9Req *v9fs_tmkdir(QVirtio9P *v9p, uint32_t dfid, const char *name, uint32_t mode, uint32_t gid, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 5ad7bebec7..5544998bac 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -23,6 +23,7 @@ #define treaddir(...) v9fs_treaddir((TReadDirOpt) __VA_ARGS__) #define tlopen(...) v9fs_tlopen((TLOpenOpt) __VA_ARGS__) #define twrite(...) v9fs_twrite((TWriteOpt) __VA_ARGS__) +#define tflush(...) v9fs_tflush((TFlushOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -420,7 +421,9 @@ static void fs_flush_success(void *obj, void *data, QGu= estAllocator *t_alloc) .requestOnly =3D true }).req; =20 - flush_req =3D v9fs_tflush(v9p, req->tag, 1); + flush_req =3D tflush({ + .client =3D v9p, .oldtag =3D req->tag, .tag =3D 1, .requestOnly = =3D true + }).req; =20 /* The write request is supposed to be flushed: the server should just * mark the write request as used and reply to the flush request. @@ -459,7 +462,9 @@ static void fs_flush_ignored(void *obj, void *data, QGu= estAllocator *t_alloc) .requestOnly =3D true }).req; =20 - flush_req =3D v9fs_tflush(v9p, req->tag, 1); + flush_req =3D tflush({ + .client =3D v9p, .oldtag =3D req->tag, .tag =3D 1, .requestOnly = =3D true + }).req; =20 /* The write request is supposed to complete. The server should * reply to the write request and the flush request. --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919822; cv=none; d=zohomail.com; s=zohoarc; b=af7TlGkSLE3LliZvFA9CZ+7igwRZkW8rlzDqC4yfWwpiTukyPoGH4nTc3iAefl+1FzdIkTdeuXgFtUr58imG8EBZr5xJDktmZ1TrVAtS1vFDDxY7ULAQCl3ZvI72fzz8VGKpK8DLIdJ0U7aUZaAmXwssuD2T8e5Amul5/cDcXWE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919822; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=usMRXxHFD0luGUFQyQD5ySllsBY+goQhU1DsI2tKr/s=; b=h8OXWvpadchQX3oyO3caP3eLD+aEJLRWWigGGR59zNS6RdY8CEXCeoCTEHf8/VdkRvifHc4ZcQKGXWiI6fVqOrJjiauQIYjI19BOHhKR2auyZPhMI3xfu5Z/n+WMXMYxWSSyPOIyXHpGg3fNz5e3dOmjcv+c0BWSiYE48sY3ikI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919822013876.4112133986888; Tue, 4 Oct 2022 14:43:42 -0700 (PDT) Received: from localhost ([::1]:55544 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofphT-0007S5-Uz for importer@patchew.org; Tue, 04 Oct 2022 17:43:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpML-000756-8Q for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:49 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:54553) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpMJ-0002hv-9w for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:21:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=usMRXxHFD0luGUFQyQD5ySllsBY+goQhU1DsI2tKr/s=; b=SoYzh aiq+kTtWAVa1Enuh2a2PPxuyv4XO7vhqG09bWPaWgDFzBo5hwStvCZxak39zs1rnmwP0Guq2d3Nlo FJNfFJVKrH1WTjsmT+i21N8EcCXVUvZ5Bm4LsLNxJpxwbqIecAhtO1gqvz309TMIa9WHTJYYBdVur 4rYaIPsOef7KiMsQ6JVOwha93EeRR9ZNyBDaCNCUU5C+TR/CM5h4EMGCMaG21CSR8bbGK5MXM7I1b qbL11hiG2SZw97QS17Cs+A7284VD8LAZY26KtcwUddgul01adJc2WbVEIi2P8aJFOEtmOL6hMO+Tr KizutYq1n2pycUkTumJgxo3+VaVmg==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:06 +0200 Subject: [PATCH 15/20] tests/9p: merge v9fs_tmkdir() and do_mkdir() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=b87b2c972921df980440ff5b2d3e6bb8163d6551@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919823733100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify those 2 functions into a single function v9fs_tmkdir() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 42 ++++++++++++++++++++++----- tests/qtest/libqos/virtio-9p-client.h | 36 +++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 30 ++++++------------- 3 files changed, 78 insertions(+), 30 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 3be0ffc7da..c374ba2048 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -766,10 +766,26 @@ void v9fs_rflush(P9Req *req) } =20 /* size[4] Tmkdir tag[2] dfid[4] name[s] mode[4] gid[4] */ -P9Req *v9fs_tmkdir(QVirtio9P *v9p, uint32_t dfid, const char *name, - uint32_t mode, uint32_t gid, uint16_t tag) +TMkdirRes v9fs_tmkdir(TMkdirOpt opt) { P9Req *req; + uint32_t err; + g_autofree char *name =3D g_strdup(opt.name); + + g_assert(opt.client); + /* expecting either hi-level atPath or low-level dfid, but not both */ + g_assert(!opt.atPath || !opt.dfid); + /* expecting either Rmkdir or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !opt.rmkdir.qid); + + if (opt.atPath) { + opt.dfid =3D v9fs_twalk((TWalkOpt) { .client =3D opt.client, + .path =3D opt.atPath }).newfid; + } + + if (!opt.mode) { + opt.mode =3D 0750; + } =20 uint32_t body_size =3D 4 + 4 + 4; uint16_t string_size =3D v9fs_string_size(name); @@ -777,13 +793,25 @@ P9Req *v9fs_tmkdir(QVirtio9P *v9p, uint32_t dfid, con= st char *name, g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 - req =3D v9fs_req_init(v9p, body_size, P9_TMKDIR, tag); - v9fs_uint32_write(req, dfid); + req =3D v9fs_req_init(opt.client, body_size, P9_TMKDIR, opt.tag); + v9fs_uint32_write(req, opt.dfid); v9fs_string_write(req, name); - v9fs_uint32_write(req, mode); - v9fs_uint32_write(req, gid); + v9fs_uint32_write(req, opt.mode); + v9fs_uint32_write(req, opt.gid); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rmkdir(req, opt.rmkdir.qid); + } + req =3D NULL; /* request was freed */ + } + + return (TMkdirRes) { .req =3D req }; } =20 /* size[4] Rmkdir tag[2] qid[13] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index b22b54c720..ae44f95a4d 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -287,6 +287,39 @@ typedef struct TFlushRes { P9Req *req; } TFlushRes; =20 +/* options for 'Tmkdir' 9p request */ +typedef struct TMkdirOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* low level variant of directory where new one shall be created */ + uint32_t dfid; + /* high-level variant of directory where new one shall be created */ + const char *atPath; + /* New directory's name (required) */ + const char *name; + /* Linux mkdir(2) mode bits (optional) */ + uint32_t mode; + /* effective group ID of caller */ + uint32_t gid; + /* data being received from 9p server as 'Rmkdir' response (optional) = */ + struct { + /* QID of newly created directory */ + v9fs_qid *qid; + } rmkdir; + /* only send Tmkdir request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TMkdirOpt; + +/* result of 'TMkdir' 9p request */ +typedef struct TMkdirRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TMkdirRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -326,8 +359,7 @@ TWriteRes v9fs_twrite(TWriteOpt); void v9fs_rwrite(P9Req *req, uint32_t *count); TFlushRes v9fs_tflush(TFlushOpt); void v9fs_rflush(P9Req *req); -P9Req *v9fs_tmkdir(QVirtio9P *v9p, uint32_t dfid, const char *name, - uint32_t mode, uint32_t gid, uint16_t tag); +TMkdirRes v9fs_tmkdir(TMkdirOpt); void v9fs_rmkdir(P9Req *req, v9fs_qid *qid); P9Req *v9fs_tlcreate(QVirtio9P *v9p, uint32_t fid, const char *name, uint32_t flags, uint32_t mode, uint32_t gid, diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 5544998bac..6d75afee87 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -24,6 +24,7 @@ #define tlopen(...) v9fs_tlopen((TLOpenOpt) __VA_ARGS__) #define twrite(...) v9fs_twrite((TWriteOpt) __VA_ARGS__) #define tflush(...) v9fs_tflush((TFlushOpt) __VA_ARGS__) +#define tmkdir(...) v9fs_tmkdir((TMkdirOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -477,19 +478,6 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) g_free(wnames[0]); } =20 -static void do_mkdir(QVirtio9P *v9p, const char *path, const char *cname) -{ - g_autofree char *name =3D g_strdup(cname); - uint32_t fid; - P9Req *req; - - fid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; - - req =3D v9fs_tmkdir(v9p, fid, name, 0750, 0, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rmkdir(req, NULL); -} - /* create a regular file with Tlcreate and return file's fid */ static uint32_t do_lcreate(QVirtio9P *v9p, const char *path, const char *cname) @@ -587,7 +575,7 @@ static void fs_create_dir(void *obj, void *data, QGuest= Allocator *t_alloc) g_assert(root_path !=3D NULL); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "01"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "01" }); =20 /* check if created directory really exists now ... */ g_assert(stat(new_dir, &st) =3D=3D 0); @@ -606,7 +594,7 @@ static void fs_unlinkat_dir(void *obj, void *data, QGue= stAllocator *t_alloc) g_assert(root_path !=3D NULL); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "02"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "02" }); =20 /* check if created directory really exists now ... */ g_assert(stat(new_dir, &st) =3D=3D 0); @@ -626,7 +614,7 @@ static void fs_create_file(void *obj, void *data, QGues= tAllocator *t_alloc) g_autofree char *new_file =3D virtio_9p_test_path("03/1st_file"); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "03"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "03" }); do_lcreate(v9p, "03", "1st_file"); =20 /* check if created file exists now ... */ @@ -643,7 +631,7 @@ static void fs_unlinkat_file(void *obj, void *data, QGu= estAllocator *t_alloc) g_autofree char *new_file =3D virtio_9p_test_path("04/doa_file"); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "04"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "04" }); do_lcreate(v9p, "04", "doa_file"); =20 /* check if created file exists now ... */ @@ -665,7 +653,7 @@ static void fs_symlink_file(void *obj, void *data, QGue= stAllocator *t_alloc) g_autofree char *symlink_file =3D virtio_9p_test_path("05/symlink_file= "); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "05"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "05" }); do_lcreate(v9p, "05", "real_file"); g_assert(stat(real_file, &st) =3D=3D 0); g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); @@ -686,7 +674,7 @@ static void fs_unlinkat_symlink(void *obj, void *data, g_autofree char *symlink_file =3D virtio_9p_test_path("06/symlink_file= "); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "06"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "06" }); do_lcreate(v9p, "06", "real_file"); g_assert(stat(real_file, &st) =3D=3D 0); g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); @@ -708,7 +696,7 @@ static void fs_hardlink_file(void *obj, void *data, QGu= estAllocator *t_alloc) g_autofree char *hardlink_file =3D virtio_9p_test_path("07/hardlink_fi= le"); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "07"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "07" }); do_lcreate(v9p, "07", "real_file"); g_assert(stat(real_file, &st_real) =3D=3D 0); g_assert((st_real.st_mode & S_IFMT) =3D=3D S_IFREG); @@ -733,7 +721,7 @@ static void fs_unlinkat_hardlink(void *obj, void *data, g_autofree char *hardlink_file =3D virtio_9p_test_path("08/hardlink_fi= le"); =20 tattach({ .client =3D v9p }); - do_mkdir(v9p, "/", "08"); + tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "08" }); do_lcreate(v9p, "08", "real_file"); g_assert(stat(real_file, &st_real) =3D=3D 0); g_assert((st_real.st_mode & S_IFMT) =3D=3D S_IFREG); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664920308; cv=none; d=zohomail.com; s=zohoarc; b=IzvqVO0NLL8g2eZtce3zHEpvnM1Rva7bXp5PCP/NB7kX9sbnQKPCfNYKG2/FxHApgUI5MRXxzw2dnNvPrdSYn9kvvVX2NPfJGpgM66vRYTCTXfvQCiovSvr0Jt2mYGcoHZAez5VqIThpSiqKlpGYYnhFYi1jXmYV3QaZ8ClrDqE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664920308; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=WhbbawzGxg06KAOTAn2Dp9eQQ655jR2otNYjhZi9xMM=; b=agJjXKzdoFJvEpCW+A9W23mMRWCq+x3E21W9Z58zDg8rlYFEUZMyQJMqmKW9/VHTyIoVCmU4io8NFbT6teG+6BQh3Vwm9XlAvmaARFhtgsyZN9UweVO/YERvRch7ZA5+1F5ZeEHxSlB3sofa/vR+7HD8c+r9BjRvvYlnogejjaQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664920308878677.9164700865388; Tue, 4 Oct 2022 14:51:48 -0700 (PDT) Received: from localhost ([::1]:34486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofppL-0000pT-TC for importer@patchew.org; Tue, 04 Oct 2022 17:51:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44018) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <4c01b2caa5f5b54a2020fc92701deadd2abf0571@lizzy.crudebyte.com>) id 1ofpMX-0007EZ-Um for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:03 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:33993) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <4c01b2caa5f5b54a2020fc92701deadd2abf0571@lizzy.crudebyte.com>) id 1ofpMS-0002ip-VJ for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=WhbbawzGxg06KAOTAn2Dp9eQQ655jR2otNYjhZi9xMM=; b=Wenth gfrWl8eZf9EX9NGTEwrtq4VsqfLMu3j9AaP2pS8I85p3srAKxh25CwhTUalU/fgtggWBLmrvFSWZb k1Uw+VWOrZe1MVZtFZJOgqdjSi8w5kpRXpTDEaiWQMLZQeQMAXUZevRzjrsvDTJKob0iJHSN5aeLR dpjybQl4GnknhoM3e71nHY4bhZFgRPkeN+51Ox9TN+9UlyID4UB72g/t5mVYPHRhdJysD4QcM9veY H8pxkdnvZbF0MCiOsXYaxT6AZfiFamxSilDRxMs9xkPTknSqLLiU26d7QN0n17u5A+THlto+Xr9LR SvuElIU0uECLA8Y4YKi90slaqvZRw==; Message-Id: <4c01b2caa5f5b54a2020fc92701deadd2abf0571.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:09 +0200 Subject: [PATCH 16/20] tests/9p: merge v9fs_tlcreate() and do_lcreate() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=4c01b2caa5f5b54a2020fc92701deadd2abf0571@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664920309681100002 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify those 2 functions into a single function v9fs_tlcreate() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 45 +++++++++++++++++++++------ tests/qtest/libqos/virtio-9p-client.h | 39 +++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 30 +++++------------- 3 files changed, 79 insertions(+), 35 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index c374ba2048..5c805a133c 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -827,11 +827,26 @@ void v9fs_rmkdir(P9Req *req, v9fs_qid *qid) } =20 /* size[4] Tlcreate tag[2] fid[4] name[s] flags[4] mode[4] gid[4] */ -P9Req *v9fs_tlcreate(QVirtio9P *v9p, uint32_t fid, const char *name, - uint32_t flags, uint32_t mode, uint32_t gid, - uint16_t tag) +TlcreateRes v9fs_tlcreate(TlcreateOpt opt) { P9Req *req; + uint32_t err; + g_autofree char *name =3D g_strdup(opt.name); + + g_assert(opt.client); + /* expecting either hi-level atPath or low-level fid, but not both */ + g_assert(!opt.atPath || !opt.fid); + /* expecting either Rlcreate or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !(opt.rlcreate.qid || opt.rlcreate.iounit)); + + if (opt.atPath) { + opt.fid =3D v9fs_twalk((TWalkOpt) { .client =3D opt.client, + .path =3D opt.atPath }).newfid; + } + + if (!opt.mode) { + opt.mode =3D 0750; + } =20 uint32_t body_size =3D 4 + 4 + 4 + 4; uint16_t string_size =3D v9fs_string_size(name); @@ -839,14 +854,26 @@ P9Req *v9fs_tlcreate(QVirtio9P *v9p, uint32_t fid, co= nst char *name, g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 - req =3D v9fs_req_init(v9p, body_size, P9_TLCREATE, tag); - v9fs_uint32_write(req, fid); + req =3D v9fs_req_init(opt.client, body_size, P9_TLCREATE, opt.tag); + v9fs_uint32_write(req, opt.fid); v9fs_string_write(req, name); - v9fs_uint32_write(req, flags); - v9fs_uint32_write(req, mode); - v9fs_uint32_write(req, gid); + v9fs_uint32_write(req, opt.flags); + v9fs_uint32_write(req, opt.mode); + v9fs_uint32_write(req, opt.gid); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rlcreate(req, opt.rlcreate.qid, opt.rlcreate.iounit); + } + req =3D NULL; /* request was freed */ + } + + return (TlcreateRes) { .req =3D req }; } =20 /* size[4] Rlcreate tag[2] qid[13] iounit[4] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index ae44f95a4d..8916b1c7aa 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -320,6 +320,41 @@ typedef struct TMkdirRes { P9Req *req; } TMkdirRes; =20 +/* options for 'Tlcreate' 9p request */ +typedef struct TlcreateOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* low-level variant of directory where new file shall be created */ + uint32_t fid; + /* high-level variant of directory where new file shall be created */ + const char *atPath; + /* name of new file (required) */ + const char *name; + /* Linux kernel intent bits */ + uint32_t flags; + /* Linux create(2) mode bits */ + uint32_t mode; + /* effective group ID of caller */ + uint32_t gid; + /* data being received from 9p server as 'Rlcreate' response (optional= ) */ + struct { + v9fs_qid *qid; + uint32_t *iounit; + } rlcreate; + /* only send Tlcreate request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TlcreateOpt; + +/* result of 'Tlcreate' 9p request */ +typedef struct TlcreateRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TlcreateRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -361,9 +396,7 @@ TFlushRes v9fs_tflush(TFlushOpt); void v9fs_rflush(P9Req *req); TMkdirRes v9fs_tmkdir(TMkdirOpt); void v9fs_rmkdir(P9Req *req, v9fs_qid *qid); -P9Req *v9fs_tlcreate(QVirtio9P *v9p, uint32_t fid, const char *name, - uint32_t flags, uint32_t mode, uint32_t gid, - uint16_t tag); +TlcreateRes v9fs_tlcreate(TlcreateOpt); void v9fs_rlcreate(P9Req *req, v9fs_qid *qid, uint32_t *iounit); P9Req *v9fs_tsymlink(QVirtio9P *v9p, uint32_t fid, const char *name, const char *symtgt, uint32_t gid, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 6d75afee87..d13b27bd2e 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -25,6 +25,7 @@ #define twrite(...) v9fs_twrite((TWriteOpt) __VA_ARGS__) #define tflush(...) v9fs_tflush((TFlushOpt) __VA_ARGS__) #define tmkdir(...) v9fs_tmkdir((TMkdirOpt) __VA_ARGS__) +#define tlcreate(...) v9fs_tlcreate((TlcreateOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -478,23 +479,6 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) g_free(wnames[0]); } =20 -/* create a regular file with Tlcreate and return file's fid */ -static uint32_t do_lcreate(QVirtio9P *v9p, const char *path, - const char *cname) -{ - g_autofree char *name =3D g_strdup(cname); - uint32_t fid; - P9Req *req; - - fid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; - - req =3D v9fs_tlcreate(v9p, fid, name, 0, 0750, 0, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlcreate(req, NULL, NULL); - - return fid; -} - /* create symlink named @a clink in directory @a path pointing to @a to */ static void do_symlink(QVirtio9P *v9p, const char *path, const char *clink, const char *to) @@ -615,7 +599,7 @@ static void fs_create_file(void *obj, void *data, QGues= tAllocator *t_alloc) =20 tattach({ .client =3D v9p }); tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "03" }); - do_lcreate(v9p, "03", "1st_file"); + tlcreate({ .client =3D v9p, .atPath =3D "03", .name =3D "1st_file" }); =20 /* check if created file exists now ... */ g_assert(stat(new_file, &st) =3D=3D 0); @@ -632,7 +616,7 @@ static void fs_unlinkat_file(void *obj, void *data, QGu= estAllocator *t_alloc) =20 tattach({ .client =3D v9p }); tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "04" }); - do_lcreate(v9p, "04", "doa_file"); + tlcreate({ .client =3D v9p, .atPath =3D "04", .name =3D "doa_file" }); =20 /* check if created file exists now ... */ g_assert(stat(new_file, &st) =3D=3D 0); @@ -654,7 +638,7 @@ static void fs_symlink_file(void *obj, void *data, QGue= stAllocator *t_alloc) =20 tattach({ .client =3D v9p }); tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "05" }); - do_lcreate(v9p, "05", "real_file"); + tlcreate({ .client =3D v9p, .atPath =3D "05", .name =3D "real_file" }); g_assert(stat(real_file, &st) =3D=3D 0); g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); =20 @@ -675,7 +659,7 @@ static void fs_unlinkat_symlink(void *obj, void *data, =20 tattach({ .client =3D v9p }); tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "06" }); - do_lcreate(v9p, "06", "real_file"); + tlcreate({ .client =3D v9p, .atPath =3D "06", .name =3D "real_file" }); g_assert(stat(real_file, &st) =3D=3D 0); g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); =20 @@ -697,7 +681,7 @@ static void fs_hardlink_file(void *obj, void *data, QGu= estAllocator *t_alloc) =20 tattach({ .client =3D v9p }); tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "07" }); - do_lcreate(v9p, "07", "real_file"); + tlcreate({ .client =3D v9p, .atPath =3D "07", .name =3D "real_file" }); g_assert(stat(real_file, &st_real) =3D=3D 0); g_assert((st_real.st_mode & S_IFMT) =3D=3D S_IFREG); =20 @@ -722,7 +706,7 @@ static void fs_unlinkat_hardlink(void *obj, void *data, =20 tattach({ .client =3D v9p }); tmkdir({ .client =3D v9p, .atPath =3D "/", .name =3D "08" }); - do_lcreate(v9p, "08", "real_file"); + tlcreate({ .client =3D v9p, .atPath =3D "08", .name =3D "real_file" }); g_assert(stat(real_file, &st_real) =3D=3D 0); g_assert((st_real.st_mode & S_IFMT) =3D=3D S_IFREG); =20 --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664920054; cv=none; d=zohomail.com; s=zohoarc; b=CqvVIa8Vc0Rj2MYhV54UPpPrsgUPxjGc4en2DWZ7a7bFaQhXOJ7SRD9+S/tcIbTrE3urIOw33TiPnBSuL1eFGHEnj1AtBLj9OS6uI3FOibxiL/5bSf3PQkbVPyZSERb7CfCe38i555beWVHWDHtf2aLSr35bf6OxdjJ1Ud2GHlk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664920054; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=xbqTX5xjcGmXUiHQayT1vdGoAFLg8EWMPkkJfY5m+Wk=; b=ALLR/iLKuKiJrDVDwzPnoo2k3pihGeCs61Xg4EBpljRH5ly7LyjBsr3+UjpoFGyMXjUD3hkddDBrcNjQNlS4ta1/YfW6gr4WNw6SY4wnIasx15+oj9Ot5c1TX8fSWYARiUiL0etdiF0XurTpsXQKZsxdUe/QJhKACe+w0xqjR34= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664920054892125.07487575230368; Tue, 4 Oct 2022 14:47:34 -0700 (PDT) Received: from localhost ([::1]:59446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofplF-0003Az-JS for importer@patchew.org; Tue, 04 Oct 2022 17:47:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44020) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <563f3ad04fe596ce0ae1e2654d1d08237f18c830@lizzy.crudebyte.com>) id 1ofpMX-0007Ea-Uv for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:03 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:38643) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <563f3ad04fe596ce0ae1e2654d1d08237f18c830@lizzy.crudebyte.com>) id 1ofpMU-0002jf-If for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=xbqTX5xjcGmXUiHQayT1vdGoAFLg8EWMPkkJfY5m+Wk=; b=e8M1r E1U4eTnRKuXhOIshQbPkdXIkDVmZD1VMMiw0XRW6+HH9g+yWgBmUZqpiii/oOkrV/VhVLpYmIMhZV dbXCfzRaCaQ/K8MnLDciWS2RyBkvzWpxJeW/9e/wWym1DvmehWd7o4ZFguDF6rzIQMah/nM8ikRmO r4WiMNb5ITF2U6ucvkJ6vrgiyx61qhKpatYM2+zOPfDwnZyCWlMXfKLKMJGsRu91cf3r25d7suyjV AgVTd+efUxlHFJf/aUKp0ZqVUBf/uKVf5SR8Dnw0SIE05kwQ0eR668jW8+tM6b39DNUNv4SY4OhXv igIfy49YHU53teVkBqIPy9EWnVqBQ==; Message-Id: <563f3ad04fe596ce0ae1e2654d1d08237f18c830.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:11 +0200 Subject: [PATCH 17/20] tests/9p: merge v9fs_tsymlink() and do_symlink() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=563f3ad04fe596ce0ae1e2654d1d08237f18c830@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664920057167100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify those 2 functions into a single function v9fs_tsymlink() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 37 ++++++++++++++++++++++----- tests/qtest/libqos/virtio-9p-client.h | 35 +++++++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 27 +++++++------------ 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 5c805a133c..89eaf50355 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -892,10 +892,23 @@ void v9fs_rlcreate(P9Req *req, v9fs_qid *qid, uint32_= t *iounit) } =20 /* size[4] Tsymlink tag[2] fid[4] name[s] symtgt[s] gid[4] */ -P9Req *v9fs_tsymlink(QVirtio9P *v9p, uint32_t fid, const char *name, - const char *symtgt, uint32_t gid, uint16_t tag) +TsymlinkRes v9fs_tsymlink(TsymlinkOpt opt) { P9Req *req; + uint32_t err; + g_autofree char *name =3D g_strdup(opt.name); + g_autofree char *symtgt =3D g_strdup(opt.symtgt); + + g_assert(opt.client); + /* expecting either hi-level atPath or low-level fid, but not both */ + g_assert(!opt.atPath || !opt.fid); + /* expecting either Rsymlink or Rlerror, but obviously not both */ + g_assert(!opt.expectErr || !opt.rsymlink.qid); + + if (opt.atPath) { + opt.fid =3D v9fs_twalk((TWalkOpt) { .client =3D opt.client, + .path =3D opt.atPath }).newfid; + } =20 uint32_t body_size =3D 4 + 4; uint16_t string_size =3D v9fs_string_size(name) + v9fs_string_size(sym= tgt); @@ -903,13 +916,25 @@ P9Req *v9fs_tsymlink(QVirtio9P *v9p, uint32_t fid, co= nst char *name, g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 - req =3D v9fs_req_init(v9p, body_size, P9_TSYMLINK, tag); - v9fs_uint32_write(req, fid); + req =3D v9fs_req_init(opt.client, body_size, P9_TSYMLINK, opt.tag); + v9fs_uint32_write(req, opt.fid); v9fs_string_write(req, name); v9fs_string_write(req, symtgt); - v9fs_uint32_write(req, gid); + v9fs_uint32_write(req, opt.gid); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rsymlink(req, opt.rsymlink.qid); + } + req =3D NULL; /* request was freed */ + } + + return (TsymlinkRes) { .req =3D req }; } =20 /* size[4] Rsymlink tag[2] qid[13] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index 8916b1c7aa..b905a54966 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -355,6 +355,38 @@ typedef struct TlcreateRes { P9Req *req; } TlcreateRes; =20 +/* options for 'Tsymlink' 9p request */ +typedef struct TsymlinkOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* low-level variant of directory where symlink shall be created */ + uint32_t fid; + /* high-level variant of directory where symlink shall be created */ + const char *atPath; + /* name of symlink (required) */ + const char *name; + /* where symlink will point to (required) */ + const char *symtgt; + /* effective group ID of caller */ + uint32_t gid; + /* data being received from 9p server as 'Rsymlink' response (optional= ) */ + struct { + v9fs_qid *qid; + } rsymlink; + /* only send Tsymlink request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TsymlinkOpt; + +/* result of 'Tsymlink' 9p request */ +typedef struct TsymlinkRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TsymlinkRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -398,8 +430,7 @@ TMkdirRes v9fs_tmkdir(TMkdirOpt); void v9fs_rmkdir(P9Req *req, v9fs_qid *qid); TlcreateRes v9fs_tlcreate(TlcreateOpt); void v9fs_rlcreate(P9Req *req, v9fs_qid *qid, uint32_t *iounit); -P9Req *v9fs_tsymlink(QVirtio9P *v9p, uint32_t fid, const char *name, - const char *symtgt, uint32_t gid, uint16_t tag); +TsymlinkRes v9fs_tsymlink(TsymlinkOpt); void v9fs_rsymlink(P9Req *req, v9fs_qid *qid); P9Req *v9fs_tlink(QVirtio9P *v9p, uint32_t dfid, uint32_t fid, const char *name, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index d13b27bd2e..c7213d6caf 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -26,6 +26,7 @@ #define tflush(...) v9fs_tflush((TFlushOpt) __VA_ARGS__) #define tmkdir(...) v9fs_tmkdir((TMkdirOpt) __VA_ARGS__) #define tlcreate(...) v9fs_tlcreate((TlcreateOpt) __VA_ARGS__) +#define tsymlink(...) v9fs_tsymlink((TsymlinkOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -479,22 +480,6 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) g_free(wnames[0]); } =20 -/* create symlink named @a clink in directory @a path pointing to @a to */ -static void do_symlink(QVirtio9P *v9p, const char *path, const char *clink, - const char *to) -{ - g_autofree char *name =3D g_strdup(clink); - g_autofree char *dst =3D g_strdup(to); - uint32_t fid; - P9Req *req; - - fid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; - - req =3D v9fs_tsymlink(v9p, fid, name, dst, 0, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rsymlink(req, NULL); -} - /* create a hard link named @a clink in directory @a path pointing to @a t= o */ static void do_hardlink(QVirtio9P *v9p, const char *path, const char *clin= k, const char *to) @@ -642,7 +627,10 @@ static void fs_symlink_file(void *obj, void *data, QGu= estAllocator *t_alloc) g_assert(stat(real_file, &st) =3D=3D 0); g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); =20 - do_symlink(v9p, "05", "symlink_file", "real_file"); + tsymlink({ + .client =3D v9p, .atPath =3D "05", .name =3D "symlink_file", + .symtgt =3D "real_file" + }); =20 /* check if created link exists now */ g_assert(stat(symlink_file, &st) =3D=3D 0); @@ -663,7 +651,10 @@ static void fs_unlinkat_symlink(void *obj, void *data, g_assert(stat(real_file, &st) =3D=3D 0); g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); =20 - do_symlink(v9p, "06", "symlink_file", "real_file"); + tsymlink({ + .client =3D v9p, .atPath =3D "06", .name =3D "symlink_file", + .symtgt =3D "real_file" + }); g_assert(stat(symlink_file, &st) =3D=3D 0); =20 do_unlinkat(v9p, "06", "symlink_file", 0); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664920309; cv=none; d=zohomail.com; s=zohoarc; b=VHPGDH5C+q2gSq1UWpSxJFoKMqxAHXy13eQFggd/E4AIurA0F6YZOGukA51BOl0UU7jwDM1KZ4C9aDWud3k7Ad9URPLkfdd9QS2IwpP7VkcrESEj+YwDJHLUl0Lv2A+9Qrx4p3WCgdoGaGoBXF7gVtepmu5UKNWQLzjo+UTbk9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664920309; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=rlTQlI5k8Nd+hbKY5hTuOEEUSS7piW6R/a3821HJf1k=; b=ZvBzEPpUqHPh3/dgSnuukm08MvMUDb9LkIKqzdsHqHjxRjetN69KAJAR75Ll6pJJqGMGx15r1crgx5aBw/KfU71RlzuMCBSVj03xBYyfgDpAsdHGPuyjTa4jVUdy7TuOGdOrLKGDnpXvA6/ExoShLY0UuvHR/IL+UbkbHIOQzd0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664920309111489.14087913361243; Tue, 4 Oct 2022 14:51:49 -0700 (PDT) Received: from localhost ([::1]:37150 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofppM-0000oi-3t for importer@patchew.org; Tue, 04 Oct 2022 17:51:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49258) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpMf-0007Nt-91 for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:09 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:54965) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofpMa-0002l2-NJ for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=rlTQlI5k8Nd+hbKY5hTuOEEUSS7piW6R/a3821HJf1k=; b=hoUO5 9G3vstlIUtPdKJyMy2hE5YnXzOIG5IZFhoIZPkiIZCqDNHC3oAoGBMF1qem2pTy0asvDI+93mIHL/ 5QcTD17oqQZVsmDkAdzJ79oBmxz+d0HBIFWP9oqeiOgqUYxCymmMRHwjwccCiwvVKpLUryd1jDfJf GjKe9gnTKBLgKHIvGtFtKZUeaVW9DpNOnZkWjE0Qok6IpcL1EcUYl4aRyAOpWJOcnuVjV+ANX2N9l AYbKCUEDMWtbh7IG2ufChtGeRsyDjnM5P5gU1VX69ys/q7Ns4RVv98P1pfzh/f2YT1nJLtNmdaCwl PtlDGbv9+DDF6TkfJjQqICswgqd9A==; Message-Id: In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:14 +0200 Subject: [PATCH 18/20] tests/9p: merge v9fs_tlink() and do_hardlink() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=cb4d42203e1e4e6027df4924bbe4bdbc002f668b@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664920309678100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify those 2 functions into a single function v9fs_tlink() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 43 ++++++++++++++++++++++----- tests/qtest/libqos/virtio-9p-client.h | 31 +++++++++++++++++-- tests/qtest/virtio-9p-test.c | 26 ++++++---------- 3 files changed, 73 insertions(+), 27 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index 89eaf50355..a2770719b9 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -950,23 +950,50 @@ void v9fs_rsymlink(P9Req *req, v9fs_qid *qid) } =20 /* size[4] Tlink tag[2] dfid[4] fid[4] name[s] */ -P9Req *v9fs_tlink(QVirtio9P *v9p, uint32_t dfid, uint32_t fid, - const char *name, uint16_t tag) +TlinkRes v9fs_tlink(TlinkOpt opt) { P9Req *req; + uint32_t err; + + g_assert(opt.client); + /* expecting either hi-level atPath or low-level dfid, but not both */ + g_assert(!opt.atPath || !opt.dfid); + /* expecting either hi-level toPath or low-level fid, but not both */ + g_assert(!opt.toPath || !opt.fid); + + if (opt.atPath) { + opt.dfid =3D v9fs_twalk((TWalkOpt) { .client =3D opt.client, + .path =3D opt.atPath }).newfid; + } + if (opt.toPath) { + opt.fid =3D v9fs_twalk((TWalkOpt) { .client =3D opt.client, + .path =3D opt.toPath }).newfid; + } =20 uint32_t body_size =3D 4 + 4; - uint16_t string_size =3D v9fs_string_size(name); + uint16_t string_size =3D v9fs_string_size(opt.name); =20 g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 - req =3D v9fs_req_init(v9p, body_size, P9_TLINK, tag); - v9fs_uint32_write(req, dfid); - v9fs_uint32_write(req, fid); - v9fs_string_write(req, name); + req =3D v9fs_req_init(opt.client, body_size, P9_TLINK, opt.tag); + v9fs_uint32_write(req, opt.dfid); + v9fs_uint32_write(req, opt.fid); + v9fs_string_write(req, opt.name); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_rlink(req); + } + req =3D NULL; /* request was freed */ + } + + return (TlinkRes) { .req =3D req }; } =20 /* size[4] Rlink tag[2] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index b905a54966..49ffd0fc51 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -387,6 +387,34 @@ typedef struct TsymlinkRes { P9Req *req; } TsymlinkRes; =20 +/* options for 'Tlink' 9p request */ +typedef struct TlinkOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* low-level variant of directory where hard link shall be created */ + uint32_t dfid; + /* high-level variant of directory where hard link shall be created */ + const char *atPath; + /* low-level variant of target referenced by new hard link */ + uint32_t fid; + /* high-level variant of target referenced by new hard link */ + const char *toPath; + /* name of hard link (required) */ + const char *name; + /* only send Tlink request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TlinkOpt; + +/* result of 'Tlink' 9p request */ +typedef struct TlinkRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TlinkRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -432,8 +460,7 @@ TlcreateRes v9fs_tlcreate(TlcreateOpt); void v9fs_rlcreate(P9Req *req, v9fs_qid *qid, uint32_t *iounit); TsymlinkRes v9fs_tsymlink(TsymlinkOpt); void v9fs_rsymlink(P9Req *req, v9fs_qid *qid); -P9Req *v9fs_tlink(QVirtio9P *v9p, uint32_t dfid, uint32_t fid, - const char *name, uint16_t tag); +TlinkRes v9fs_tlink(TlinkOpt); void v9fs_rlink(P9Req *req); P9Req *v9fs_tunlinkat(QVirtio9P *v9p, uint32_t dirfd, const char *name, uint32_t flags, uint16_t tag); diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index c7213d6caf..185eaf8b1e 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -27,6 +27,7 @@ #define tmkdir(...) v9fs_tmkdir((TMkdirOpt) __VA_ARGS__) #define tlcreate(...) v9fs_tlcreate((TlcreateOpt) __VA_ARGS__) #define tsymlink(...) v9fs_tsymlink((TsymlinkOpt) __VA_ARGS__) +#define tlink(...) v9fs_tlink((TlinkOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -480,21 +481,6 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) g_free(wnames[0]); } =20 -/* create a hard link named @a clink in directory @a path pointing to @a t= o */ -static void do_hardlink(QVirtio9P *v9p, const char *path, const char *clin= k, - const char *to) -{ - uint32_t dfid, fid; - P9Req *req; - - dfid =3D twalk({ .client =3D v9p, .path =3D path }).newfid; - fid =3D twalk({ .client =3D v9p, .path =3D to }).newfid; - - req =3D v9fs_tlink(v9p, dfid, fid, clink, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_rlink(req); -} - static void do_unlinkat(QVirtio9P *v9p, const char *atpath, const char *rp= ath, uint32_t flags) { @@ -676,7 +662,10 @@ static void fs_hardlink_file(void *obj, void *data, QG= uestAllocator *t_alloc) g_assert(stat(real_file, &st_real) =3D=3D 0); g_assert((st_real.st_mode & S_IFMT) =3D=3D S_IFREG); =20 - do_hardlink(v9p, "07", "hardlink_file", "07/real_file"); + tlink({ + .client =3D v9p, .atPath =3D "07", .name =3D "hardlink_file", + .toPath =3D "07/real_file" + }); =20 /* check if link exists now ... */ g_assert(stat(hardlink_file, &st_link) =3D=3D 0); @@ -701,7 +690,10 @@ static void fs_unlinkat_hardlink(void *obj, void *data, g_assert(stat(real_file, &st_real) =3D=3D 0); g_assert((st_real.st_mode & S_IFMT) =3D=3D S_IFREG); =20 - do_hardlink(v9p, "08", "hardlink_file", "08/real_file"); + tlink({ + .client =3D v9p, .atPath =3D "08", .name =3D "hardlink_file", + .toPath =3D "08/real_file" + }); g_assert(stat(hardlink_file, &st_link) =3D=3D 0); =20 do_unlinkat(v9p, "08", "hardlink_file", 0); --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664920539; cv=none; d=zohomail.com; s=zohoarc; b=HrB5uyrdqZE/Fl7gYvX60Ze3Xlvwvyjrj3/ot/k8kFgoakpGpg+pDXbaPXpqUqsLaMPSeKFjGX4vVhxRDrZibhnNUFzmOVIk7GYnGluIFtJh6XtIeQc6IayGET+IHV5txZhnDqWYv2sAGj78qYBx83viIOPpoxFR7dS1D8/ZI/w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664920539; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=mX9oEwfmleHCGs8KbSzwK1pL5FOddn35HCSGO+dBVOg=; b=ICJJ8ElrJoG+iKddV2iHEab3oJPWdnp9PU9lbLnOFNOsUkFULZXNGR1kq0klTzJvxtshX5TBUHdPOoq8WNMbwQ7/G1s7g2BVVBrK7kZ/QwtPo2eD+u+YDOlzVYICqDYG57UVl83g4bcc4udSK/vuRWU+0flzzYp6P8ZwM7UJFV0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664920539887804.835176109744; Tue, 4 Oct 2022 14:55:39 -0700 (PDT) Received: from localhost ([::1]:57942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpt4-0006Pn-46 for importer@patchew.org; Tue, 04 Oct 2022 17:55:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <1dea593edd464908d92501933c068388c01f1744@lizzy.crudebyte.com>) id 1ofpMj-0007bZ-K0 for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:14 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:42613) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <1dea593edd464908d92501933c068388c01f1744@lizzy.crudebyte.com>) id 1ofpMh-0002oI-Fd for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=mX9oEwfmleHCGs8KbSzwK1pL5FOddn35HCSGO+dBVOg=; b=EcYdd Kl7fKPcjVHBb967Z/Wro9UM0wskeT5/plZXmOe75ar5s0Xjoum0FuhyQFcegagKJJ5Ik+IOAD2vRt IKCKwylwlczVIDv07UNP9iCTEf+gvxnpockBIxAwiMznYauc2rNPM4/X5IO/UYbgMceyPdRW6D/yR 6q/LftOiCGUtkVrNvpkcAolcQJZdW+AHoBtWG1/RA+et/utt9OJWXeIlh6UDZubaJ17AolX3KwRXe qHSYlYN/LvJTVcMdVZ/K4XHXaL+WUSi36KaZrxP/u+OYpxj5+Z/gwY2i8DKyzmGu0u49OPjjr+Hum nusDh+AWo2WhioGuyLRT6f1dbKbDw==; Message-Id: <1dea593edd464908d92501933c068388c01f1744.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:16 +0200 Subject: [PATCH 19/20] tests/9p: merge v9fs_tunlinkat() and do_unlinkat() To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=1dea593edd464908d92501933c068388c01f1744@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664920541321100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As with previous patches, unify those 2 functions into a single function v9fs_tunlinkat() by using a declarative function arguments approach. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 37 +++++++++++++++++++++------ tests/qtest/libqos/virtio-9p-client.h | 29 +++++++++++++++++++-- tests/qtest/virtio-9p-test.c | 26 ++++++------------- 3 files changed, 64 insertions(+), 28 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index a2770719b9..e017e030ec 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -1004,23 +1004,44 @@ void v9fs_rlink(P9Req *req) } =20 /* size[4] Tunlinkat tag[2] dirfd[4] name[s] flags[4] */ -P9Req *v9fs_tunlinkat(QVirtio9P *v9p, uint32_t dirfd, const char *name, - uint32_t flags, uint16_t tag) +TunlinkatRes v9fs_tunlinkat(TunlinkatOpt opt) { P9Req *req; + uint32_t err; + + g_assert(opt.client); + /* expecting either hi-level atPath or low-level dirfd, but not both */ + g_assert(!opt.atPath || !opt.dirfd); + + if (opt.atPath) { + opt.dirfd =3D v9fs_twalk((TWalkOpt) { .client =3D opt.client, + .path =3D opt.atPath }).newfid; + } =20 uint32_t body_size =3D 4 + 4; - uint16_t string_size =3D v9fs_string_size(name); + uint16_t string_size =3D v9fs_string_size(opt.name); =20 g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 - req =3D v9fs_req_init(v9p, body_size, P9_TUNLINKAT, tag); - v9fs_uint32_write(req, dirfd); - v9fs_string_write(req, name); - v9fs_uint32_write(req, flags); + req =3D v9fs_req_init(opt.client, body_size, P9_TUNLINKAT, opt.tag); + v9fs_uint32_write(req, opt.dirfd); + v9fs_string_write(req, opt.name); + v9fs_uint32_write(req, opt.flags); v9fs_req_send(req); - return req; + + if (!opt.requestOnly) { + v9fs_req_wait_for_reply(req, NULL); + if (opt.expectErr) { + v9fs_rlerror(req, &err); + g_assert_cmpint(err, =3D=3D, opt.expectErr); + } else { + v9fs_runlinkat(req); + } + req =3D NULL; /* request was freed */ + } + + return (TunlinkatRes) { .req =3D req }; } =20 /* size[4] Runlinkat tag[2] */ diff --git a/tests/qtest/libqos/virtio-9p-client.h b/tests/qtest/libqos/vir= tio-9p-client.h index 49ffd0fc51..78228eb97d 100644 --- a/tests/qtest/libqos/virtio-9p-client.h +++ b/tests/qtest/libqos/virtio-9p-client.h @@ -415,6 +415,32 @@ typedef struct TlinkRes { P9Req *req; } TlinkRes; =20 +/* options for 'Tunlinkat' 9p request */ +typedef struct TunlinkatOpt { + /* 9P client being used (mandatory) */ + QVirtio9P *client; + /* user supplied tag number being returned with response (optional) */ + uint16_t tag; + /* low-level variant of directory where name shall be unlinked */ + uint32_t dirfd; + /* high-level variant of directory where name shall be unlinked */ + const char *atPath; + /* name of directory entry to be unlinked (required) */ + const char *name; + /* Linux unlinkat(2) flags */ + uint32_t flags; + /* only send Tunlinkat request but not wait for a reply? (optional) */ + bool requestOnly; + /* do we expect an Rlerror response, if yes which error code? (optiona= l) */ + uint32_t expectErr; +} TunlinkatOpt; + +/* result of 'Tunlinkat' 9p request */ +typedef struct TunlinkatRes { + /* if requestOnly was set: request object for further processing */ + P9Req *req; +} TunlinkatRes; + void v9fs_set_allocator(QGuestAllocator *t_alloc); void v9fs_memwrite(P9Req *req, const void *addr, size_t len); void v9fs_memskip(P9Req *req, size_t len); @@ -462,8 +488,7 @@ TsymlinkRes v9fs_tsymlink(TsymlinkOpt); void v9fs_rsymlink(P9Req *req, v9fs_qid *qid); TlinkRes v9fs_tlink(TlinkOpt); void v9fs_rlink(P9Req *req); -P9Req *v9fs_tunlinkat(QVirtio9P *v9p, uint32_t dirfd, const char *name, - uint32_t flags, uint16_t tag); +TunlinkatRes v9fs_tunlinkat(TunlinkatOpt); void v9fs_runlinkat(P9Req *req); =20 #endif diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 185eaf8b1e..65e69491e5 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -28,6 +28,7 @@ #define tlcreate(...) v9fs_tlcreate((TlcreateOpt) __VA_ARGS__) #define tsymlink(...) v9fs_tsymlink((TsymlinkOpt) __VA_ARGS__) #define tlink(...) v9fs_tlink((TlinkOpt) __VA_ARGS__) +#define tunlinkat(...) v9fs_tunlinkat((TunlinkatOpt) __VA_ARGS__) =20 static void pci_config(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -481,20 +482,6 @@ static void fs_flush_ignored(void *obj, void *data, QG= uestAllocator *t_alloc) g_free(wnames[0]); } =20 -static void do_unlinkat(QVirtio9P *v9p, const char *atpath, const char *rp= ath, - uint32_t flags) -{ - g_autofree char *name =3D g_strdup(rpath); - uint32_t fid; - P9Req *req; - - fid =3D twalk({ .client =3D v9p, .path =3D atpath }).newfid; - - req =3D v9fs_tunlinkat(v9p, fid, name, flags, 0); - v9fs_req_wait_for_reply(req, NULL); - v9fs_runlinkat(req); -} - static void fs_readdir_split_128(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -556,7 +543,10 @@ static void fs_unlinkat_dir(void *obj, void *data, QGu= estAllocator *t_alloc) /* ... and is actually a directory */ g_assert((st.st_mode & S_IFMT) =3D=3D S_IFDIR); =20 - do_unlinkat(v9p, "/", "02", P9_DOTL_AT_REMOVEDIR); + tunlinkat({ + .client =3D v9p, .atPath =3D "/", .name =3D "02", + .flags =3D P9_DOTL_AT_REMOVEDIR + }); /* directory should be gone now */ g_assert(stat(new_dir, &st) !=3D 0); } @@ -594,7 +584,7 @@ static void fs_unlinkat_file(void *obj, void *data, QGu= estAllocator *t_alloc) /* ... and is a regular file */ g_assert((st.st_mode & S_IFMT) =3D=3D S_IFREG); =20 - do_unlinkat(v9p, "04", "doa_file", 0); + tunlinkat({ .client =3D v9p, .atPath =3D "04", .name =3D "doa_file" }); /* file should be gone now */ g_assert(stat(new_file, &st) !=3D 0); } @@ -643,7 +633,7 @@ static void fs_unlinkat_symlink(void *obj, void *data, }); g_assert(stat(symlink_file, &st) =3D=3D 0); =20 - do_unlinkat(v9p, "06", "symlink_file", 0); + tunlinkat({ .client =3D v9p, .atPath =3D "06", .name =3D "symlink_file= " }); /* symlink should be gone now */ g_assert(stat(symlink_file, &st) !=3D 0); } @@ -696,7 +686,7 @@ static void fs_unlinkat_hardlink(void *obj, void *data, }); g_assert(stat(hardlink_file, &st_link) =3D=3D 0); =20 - do_unlinkat(v9p, "08", "hardlink_file", 0); + tunlinkat({ .client =3D v9p, .atPath =3D "08", .name =3D "hardlink_fil= e" }); /* symlink should be gone now */ g_assert(stat(hardlink_file, &st_link) !=3D 0); /* and old file should still exist */ --=20 2.30.2 From nobody Mon May 13 02:07:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=crudebyte.com ARC-Seal: i=1; a=rsa-sha256; t=1664919735; cv=none; d=zohomail.com; s=zohoarc; b=XtVr5FoYvVTDrMWtHboJoy2q0mrZq87AaCZt0uq5WxgAsNMlpie03biJbdymNAeihUCJOPSLTBZc4EYOSpV6+T3eBMBtby2+s1F4b1ZVxAuWx+z/NI7gp/+25YbjteSXjmln39KXHLjW7Hn7OLCHoMWpQ/A+Lwa3+BDEARXbR7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664919735; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=B85oV3I79gym6QZTLeX83GlkTP+Mp33vVUVty9UPNaE=; b=H+JOrwHeYLopSGQBvVG6SLuGPTf17q0g1KijPqQzsR5F26e2TL0dfIyWS3hn3yU1mcRMXNKnv0iZA+CYnCG+uwM1cN3LJomXGa4bKXGXt57vFI9VI8Dy6z8Nk75dUEVKGaaLCLeBvkJKGGKPY8ONSISwNW8FTpVkABGFfMdgtyo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664919735974351.237665751391; Tue, 4 Oct 2022 14:42:15 -0700 (PDT) Received: from localhost ([::1]:41724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofpg6-0005KF-Po for importer@patchew.org; Tue, 04 Oct 2022 17:42:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53090) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <0f80141cde3904ed0591354059da49d1d60bcdbc@lizzy.crudebyte.com>) id 1ofpMq-0007hb-Er for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:21 -0400 Received: from lizzy.crudebyte.com ([91.194.90.13]:53557) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <0f80141cde3904ed0591354059da49d1d60bcdbc@lizzy.crudebyte.com>) id 1ofpMo-0002rG-TN for qemu-devel@nongnu.org; Tue, 04 Oct 2022 17:22:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=crudebyte.com; s=lizzy; h=Cc:To:Subject:Date:From:References:In-Reply-To: Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Content-ID: Content-Description; bh=B85oV3I79gym6QZTLeX83GlkTP+Mp33vVUVty9UPNaE=; b=dPN5Z CwCpkN9tGaPqe4/TokeviyHnIo/2uGRYVgnqjoL0JFmSAllwOMTus5/u0wrhfg0R5u+fn7xxakQnB wNjtPJ6ZYoFOSC2xpxR3U0XMZ28r1lBdTt2/hec2R0kYqEwBDH+Px/DrVq+YpWN34ndISxiGLs7YG 9t8Z/ddj5VhxEhqmS/Rop7ebQ/jJAtmixmBrbPJlKp1XuGCKHIWalFlbbv32fvJJ3oLn/rHGvjWWA erar94IIRSRMUHw1DrxtbSGdO96Jh+aFGoUYL4UgmxBMN2Z/311FwYgaT1x4LTnl806NR/PYWioPy erwLQdhiGrKSgJRVf0ioB/3CHZvNg==; Message-Id: <0f80141cde3904ed0591354059da49d1d60bcdbc.1664917004.git.qemu_oss@crudebyte.com> In-Reply-To: References: From: Christian Schoenebeck Date: Tue, 4 Oct 2022 22:54:30 +0200 Subject: [PATCH 20/20] tests/9p: remove unnecessary g_strdup() calls To: qemu-devel@nongnu.org Cc: Greg Kurz Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=91.194.90.13; envelope-from=0f80141cde3904ed0591354059da49d1d60bcdbc@lizzy.crudebyte.com; helo=lizzy.crudebyte.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @crudebyte.com) X-ZM-MESSAGEID: 1664919736156100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This is a leftover from before the recent function merge and refactoring patches: As these functions do not return control to the caller in between, it is not necessary to duplicate strings passed to them. Signed-off-by: Christian Schoenebeck --- tests/qtest/libqos/virtio-9p-client.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/tests/qtest/libqos/virtio-9p-client.c b/tests/qtest/libqos/vir= tio-9p-client.c index e017e030ec..e4a368e036 100644 --- a/tests/qtest/libqos/virtio-9p-client.c +++ b/tests/qtest/libqos/virtio-9p-client.c @@ -770,7 +770,6 @@ TMkdirRes v9fs_tmkdir(TMkdirOpt opt) { P9Req *req; uint32_t err; - g_autofree char *name =3D g_strdup(opt.name); =20 g_assert(opt.client); /* expecting either hi-level atPath or low-level dfid, but not both */ @@ -788,14 +787,14 @@ TMkdirRes v9fs_tmkdir(TMkdirOpt opt) } =20 uint32_t body_size =3D 4 + 4 + 4; - uint16_t string_size =3D v9fs_string_size(name); + uint16_t string_size =3D v9fs_string_size(opt.name); =20 g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 req =3D v9fs_req_init(opt.client, body_size, P9_TMKDIR, opt.tag); v9fs_uint32_write(req, opt.dfid); - v9fs_string_write(req, name); + v9fs_string_write(req, opt.name); v9fs_uint32_write(req, opt.mode); v9fs_uint32_write(req, opt.gid); v9fs_req_send(req); @@ -831,7 +830,6 @@ TlcreateRes v9fs_tlcreate(TlcreateOpt opt) { P9Req *req; uint32_t err; - g_autofree char *name =3D g_strdup(opt.name); =20 g_assert(opt.client); /* expecting either hi-level atPath or low-level fid, but not both */ @@ -849,14 +847,14 @@ TlcreateRes v9fs_tlcreate(TlcreateOpt opt) } =20 uint32_t body_size =3D 4 + 4 + 4 + 4; - uint16_t string_size =3D v9fs_string_size(name); + uint16_t string_size =3D v9fs_string_size(opt.name); =20 g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 req =3D v9fs_req_init(opt.client, body_size, P9_TLCREATE, opt.tag); v9fs_uint32_write(req, opt.fid); - v9fs_string_write(req, name); + v9fs_string_write(req, opt.name); v9fs_uint32_write(req, opt.flags); v9fs_uint32_write(req, opt.mode); v9fs_uint32_write(req, opt.gid); @@ -896,8 +894,6 @@ TsymlinkRes v9fs_tsymlink(TsymlinkOpt opt) { P9Req *req; uint32_t err; - g_autofree char *name =3D g_strdup(opt.name); - g_autofree char *symtgt =3D g_strdup(opt.symtgt); =20 g_assert(opt.client); /* expecting either hi-level atPath or low-level fid, but not both */ @@ -911,15 +907,16 @@ TsymlinkRes v9fs_tsymlink(TsymlinkOpt opt) } =20 uint32_t body_size =3D 4 + 4; - uint16_t string_size =3D v9fs_string_size(name) + v9fs_string_size(sym= tgt); + uint16_t string_size =3D v9fs_string_size(opt.name) + + v9fs_string_size(opt.symtgt); =20 g_assert_cmpint(body_size, <=3D, UINT32_MAX - string_size); body_size +=3D string_size; =20 req =3D v9fs_req_init(opt.client, body_size, P9_TSYMLINK, opt.tag); v9fs_uint32_write(req, opt.fid); - v9fs_string_write(req, name); - v9fs_string_write(req, symtgt); + v9fs_string_write(req, opt.name); + v9fs_string_write(req, opt.symtgt); v9fs_uint32_write(req, opt.gid); v9fs_req_send(req); =20 --=20 2.30.2