From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59342) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cBTSY-0003Mo-1n for qemu-devel@nongnu.org; Mon, 28 Nov 2016 16:27:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cBTSW-0003NW-M6 for qemu-devel@nongnu.org; Mon, 28 Nov 2016 16:27:34 -0500 Received: from mail.kernel.org ([198.145.29.136]:37656) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cBTSW-0003NE-BS for qemu-devel@nongnu.org; Mon, 28 Nov 2016 16:27:32 -0500 From: Stefano Stabellini Date: Mon, 28 Nov 2016 13:27:23 -0800 Message-Id: <1480368444-4310-3-git-send-email-sstabellini@kernel.org> In-Reply-To: <1480368444-4310-1-git-send-email-sstabellini@kernel.org> References: <1480368444-4310-1-git-send-email-sstabellini@kernel.org> Subject: [Qemu-devel] [PATCH v2 3/4] 9pfs: call v9fs_init_qiov_from_pdu before v9fs_pack List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: aneesh.kumar@linux.vnet.ibm.com Cc: groug@kaod.org, sstabellini@kernel.org, qemu-devel@nongnu.org, xen-devel@lists.xensource.com, anthony.perard@citrix.com v9fs_xattr_read should not access VirtQueueElement elems directly. Move v9fs_init_qiov_from_pdu up in the file and call v9fs_init_qiov_from_pdu before v9fs_pack. Use v9fs_pack on the new iovec. Signed-off-by: Stefano Stabellini --- Changes in v2: - add a call to qemu_iovec_destroy - fix commit description --- hw/9pfs/9p.c | 59 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 5a20a13..79d7201 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -1633,14 +1633,39 @@ out_nofid: pdu_complete(pdu, err); } +/* + * Create a QEMUIOVector for a sub-region of PDU iovecs + * + * @qiov: uninitialized QEMUIOVector + * @skip: number of bytes to skip from beginning of PDU + * @size: number of bytes to include + * @is_write: true - write, false - read + * + * The resulting QEMUIOVector has heap-allocated iovecs and must be cleaned up + * with qemu_iovec_destroy(). + */ +static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu, + size_t skip, size_t size, + bool is_write) +{ + QEMUIOVector elem; + struct iovec *iov; + unsigned int niov; + + pdu->s->transport->init_iov_from_pdu(pdu, &iov, &niov, is_write); + + qemu_iovec_init_external(&elem, iov, niov); + qemu_iovec_init(qiov, niov); + qemu_iovec_concat(qiov, &elem, skip, size); +} + static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp, uint64_t off, uint32_t max_count) { ssize_t err; size_t offset = 7; uint64_t read_count; - V9fsVirtioState *v = container_of(s, V9fsVirtioState, state); - VirtQueueElement *elem = v->elems[pdu->idx]; + QEMUIOVector qiov_full; if (fidp->fs.xattr.len < off) { read_count = 0; @@ -1656,9 +1681,11 @@ static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp, } offset += err; - err = v9fs_pack(elem->in_sg, elem->in_num, offset, + v9fs_init_qiov_from_pdu(&qiov_full, pdu, 0, read_count, false); + err = v9fs_pack(qiov_full.iov, qiov_full.niov, offset, ((char *)fidp->fs.xattr.value) + off, read_count); + qemu_iovec_destroy(&qiov_full); if (err < 0) { return err; } @@ -1732,32 +1759,6 @@ static int coroutine_fn v9fs_do_readdir_with_stat(V9fsPDU *pdu, return count; } -/* - * Create a QEMUIOVector for a sub-region of PDU iovecs - * - * @qiov: uninitialized QEMUIOVector - * @skip: number of bytes to skip from beginning of PDU - * @size: number of bytes to include - * @is_write: true - write, false - read - * - * The resulting QEMUIOVector has heap-allocated iovecs and must be cleaned up - * with qemu_iovec_destroy(). - */ -static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu, - size_t skip, size_t size, - bool is_write) -{ - QEMUIOVector elem; - struct iovec *iov; - unsigned int niov; - - pdu->s->transport->init_iov_from_pdu(pdu, &iov, &niov, is_write); - - qemu_iovec_init_external(&elem, iov, niov); - qemu_iovec_init(qiov, niov); - qemu_iovec_concat(qiov, &elem, skip, size); -} - static void coroutine_fn v9fs_read(void *opaque) { int32_t fid; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v2 3/4] 9pfs: call v9fs_init_qiov_from_pdu before v9fs_pack Date: Mon, 28 Nov 2016 13:27:23 -0800 Message-ID: <1480368444-4310-3-git-send-email-sstabellini@kernel.org> References: <1480368444-4310-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1480368444-4310-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: aneesh.kumar@linux.vnet.ibm.com Cc: xen-devel@lists.xensource.com, anthony.perard@citrix.com, sstabellini@kernel.org, groug@kaod.org, qemu-devel@nongnu.org List-Id: xen-devel@lists.xenproject.org djlmc194YXR0cl9yZWFkIHNob3VsZCBub3QgYWNjZXNzIFZpcnRRdWV1ZUVsZW1lbnQgZWxlbXMg ZGlyZWN0bHkuCk1vdmUgdjlmc19pbml0X3Fpb3ZfZnJvbV9wZHUgdXAgaW4gdGhlIGZpbGUgYW5k IGNhbGwKdjlmc19pbml0X3Fpb3ZfZnJvbV9wZHUgYmVmb3JlIHY5ZnNfcGFjay4gVXNlIHY5ZnNf cGFjayBvbiB0aGUgbmV3CmlvdmVjLgoKU2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5p IDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgoKLS0tCkNoYW5nZXMgaW4gdjI6Ci0gYWRkIGEgY2Fs bCB0byBxZW11X2lvdmVjX2Rlc3Ryb3kKLSBmaXggY29tbWl0IGRlc2NyaXB0aW9uCi0tLQogaHcv OXBmcy85cC5jIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAyOSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ody85cGZzLzlwLmMgYi9ody85cGZzLzlwLmMKaW5k ZXggNWEyMGExMy4uNzlkNzIwMSAxMDA2NDQKLS0tIGEvaHcvOXBmcy85cC5jCisrKyBiL2h3Lzlw ZnMvOXAuYwpAQCAtMTYzMywxNCArMTYzMywzOSBAQCBvdXRfbm9maWQ6CiAgICAgcGR1X2NvbXBs ZXRlKHBkdSwgZXJyKTsKIH0KIAorLyoKKyAqIENyZWF0ZSBhIFFFTVVJT1ZlY3RvciBmb3IgYSBz dWItcmVnaW9uIG9mIFBEVSBpb3ZlY3MKKyAqCisgKiBAcWlvdjogICAgICAgdW5pbml0aWFsaXpl ZCBRRU1VSU9WZWN0b3IKKyAqIEBza2lwOiAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCBm cm9tIGJlZ2lubmluZyBvZiBQRFUKKyAqIEBzaXplOiAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8g aW5jbHVkZQorICogQGlzX3dyaXRlOiAgIHRydWUgLSB3cml0ZSwgZmFsc2UgLSByZWFkCisgKgor ICogVGhlIHJlc3VsdGluZyBRRU1VSU9WZWN0b3IgaGFzIGhlYXAtYWxsb2NhdGVkIGlvdmVjcyBh bmQgbXVzdCBiZSBjbGVhbmVkIHVwCisgKiB3aXRoIHFlbXVfaW92ZWNfZGVzdHJveSgpLgorICov CitzdGF0aWMgdm9pZCB2OWZzX2luaXRfcWlvdl9mcm9tX3BkdShRRU1VSU9WZWN0b3IgKnFpb3Ys IFY5ZnNQRFUgKnBkdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBza2lwLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgaXNfd3JpdGUpCit7CisgICAgUUVNVUlPVmVjdG9yIGVsZW07CisgICAgc3RydWN0IGlv dmVjICppb3Y7CisgICAgdW5zaWduZWQgaW50IG5pb3Y7CisKKyAgICBwZHUtPnMtPnRyYW5zcG9y dC0+aW5pdF9pb3ZfZnJvbV9wZHUocGR1LCAmaW92LCAmbmlvdiwgaXNfd3JpdGUpOworCisgICAg cWVtdV9pb3ZlY19pbml0X2V4dGVybmFsKCZlbGVtLCBpb3YsIG5pb3YpOworICAgIHFlbXVfaW92 ZWNfaW5pdChxaW92LCBuaW92KTsKKyAgICBxZW11X2lvdmVjX2NvbmNhdChxaW92LCAmZWxlbSwg c2tpcCwgc2l6ZSk7Cit9CisKIHN0YXRpYyBpbnQgdjlmc194YXR0cl9yZWFkKFY5ZnNTdGF0ZSAq cywgVjlmc1BEVSAqcGR1LCBWOWZzRmlkU3RhdGUgKmZpZHAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50NjRfdCBvZmYsIHVpbnQzMl90IG1heF9jb3VudCkKIHsKICAgICBzc2l6ZV90 IGVycjsKICAgICBzaXplX3Qgb2Zmc2V0ID0gNzsKICAgICB1aW50NjRfdCByZWFkX2NvdW50Owot ICAgIFY5ZnNWaXJ0aW9TdGF0ZSAqdiA9IGNvbnRhaW5lcl9vZihzLCBWOWZzVmlydGlvU3RhdGUs IHN0YXRlKTsKLSAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtID0gdi0+ZWxlbXNbcGR1LT5pZHhd OworICAgIFFFTVVJT1ZlY3RvciBxaW92X2Z1bGw7CiAKICAgICBpZiAoZmlkcC0+ZnMueGF0dHIu bGVuIDwgb2ZmKSB7CiAgICAgICAgIHJlYWRfY291bnQgPSAwOwpAQCAtMTY1Niw5ICsxNjgxLDEx IEBAIHN0YXRpYyBpbnQgdjlmc194YXR0cl9yZWFkKFY5ZnNTdGF0ZSAqcywgVjlmc1BEVSAqcGR1 LCBWOWZzRmlkU3RhdGUgKmZpZHAsCiAgICAgfQogICAgIG9mZnNldCArPSBlcnI7CiAKLSAgICBl cnIgPSB2OWZzX3BhY2soZWxlbS0+aW5fc2csIGVsZW0tPmluX251bSwgb2Zmc2V0LAorICAgIHY5 ZnNfaW5pdF9xaW92X2Zyb21fcGR1KCZxaW92X2Z1bGwsIHBkdSwgMCwgcmVhZF9jb3VudCwgZmFs c2UpOworICAgIGVyciA9IHY5ZnNfcGFjayhxaW92X2Z1bGwuaW92LCBxaW92X2Z1bGwubmlvdiwg b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilmaWRwLT5mcy54YXR0ci52YWx1 ZSkgKyBvZmYsCiAgICAgICAgICAgICAgICAgICAgIHJlYWRfY291bnQpOworICAgIHFlbXVfaW92 ZWNfZGVzdHJveSgmcWlvdl9mdWxsKTsKICAgICBpZiAoZXJyIDwgMCkgewogICAgICAgICByZXR1 cm4gZXJyOwogICAgIH0KQEAgLTE3MzIsMzIgKzE3NTksNiBAQCBzdGF0aWMgaW50IGNvcm91dGlu ZV9mbiB2OWZzX2RvX3JlYWRkaXJfd2l0aF9zdGF0KFY5ZnNQRFUgKnBkdSwKICAgICByZXR1cm4g Y291bnQ7CiB9CiAKLS8qCi0gKiBDcmVhdGUgYSBRRU1VSU9WZWN0b3IgZm9yIGEgc3ViLXJlZ2lv biBvZiBQRFUgaW92ZWNzCi0gKgotICogQHFpb3Y6ICAgICAgIHVuaW5pdGlhbGl6ZWQgUUVNVUlP VmVjdG9yCi0gKiBAc2tpcDogICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZnJvbSBiZWdp bm5pbmcgb2YgUERVCi0gKiBAc2l6ZTogICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGluY2x1ZGUK LSAqIEBpc193cml0ZTogICB0cnVlIC0gd3JpdGUsIGZhbHNlIC0gcmVhZAotICoKLSAqIFRoZSBy ZXN1bHRpbmcgUUVNVUlPVmVjdG9yIGhhcyBoZWFwLWFsbG9jYXRlZCBpb3ZlY3MgYW5kIG11c3Qg YmUgY2xlYW5lZCB1cAotICogd2l0aCBxZW11X2lvdmVjX2Rlc3Ryb3koKS4KLSAqLwotc3RhdGlj IHZvaWQgdjlmc19pbml0X3Fpb3ZfZnJvbV9wZHUoUUVNVUlPVmVjdG9yICpxaW92LCBWOWZzUERV ICpwZHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2tpcCwg c2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlz X3dyaXRlKQotewotICAgIFFFTVVJT1ZlY3RvciBlbGVtOwotICAgIHN0cnVjdCBpb3ZlYyAqaW92 OwotICAgIHVuc2lnbmVkIGludCBuaW92OwotCi0gICAgcGR1LT5zLT50cmFuc3BvcnQtPmluaXRf aW92X2Zyb21fcGR1KHBkdSwgJmlvdiwgJm5pb3YsIGlzX3dyaXRlKTsKLQotICAgIHFlbXVfaW92 ZWNfaW5pdF9leHRlcm5hbCgmZWxlbSwgaW92LCBuaW92KTsKLSAgICBxZW11X2lvdmVjX2luaXQo cWlvdiwgbmlvdik7Ci0gICAgcWVtdV9pb3ZlY19jb25jYXQocWlvdiwgJmVsZW0sIHNraXAsIHNp emUpOwotfQotCiBzdGF0aWMgdm9pZCBjb3JvdXRpbmVfZm4gdjlmc19yZWFkKHZvaWQgKm9wYXF1 ZSkKIHsKICAgICBpbnQzMl90IGZpZDsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==