From nobody Mon Feb 9 06:00:40 2026 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612898369; cv=none; d=zohomail.com; s=zohoarc; b=aoPqjhXirgcdTleY3PzU1pY/3mk6R/SDYWAt6BJ8WnIJj1pEe1srKRGuQB/GigxvvBa6Z2roGevGVHEH5BuKCDt7Vu16VAksAdPoscOB1HjP2+R1wgJAC8r2nDWAq/OdRqo33Qjh565IGjgJNtdPLIvTpkIr+RzFl/sC+nKTT9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612898369; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4hyC0DoLv2hnyPTPX8CUYqMiRQq6B9qtchp08JRsbNU=; b=cBq99C8EUFJiXxBXd2KyDeFO5taXjvhkwIwppdXshlhSqfHIVENxlzeEnz6q1Fy1Su/Z+IVXmieOfsIhdqprzSoKNQFnL2A3qRY2TG4tM4gbhSgVUBvRra6cF0bXqPyomp1bpq6NLbyPWCjXg5HA1gij024/esc2KMCyvdmXrTA= 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=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612898368618802.023973027242; Tue, 9 Feb 2021 11:19:28 -0800 (PST) Received: from localhost ([::1]:47150 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9YXm-0007H3-KL for importer@patchew.org; Tue, 09 Feb 2021 14:19:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52026) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l9YJr-0003C2-9v for qemu-devel@nongnu.org; Tue, 09 Feb 2021 14:05:03 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:42008) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l9YJp-00027f-Ft for qemu-devel@nongnu.org; Tue, 09 Feb 2021 14:05:03 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-126-2YhafU3HOKKjtIXZ8-GVFQ-1; Tue, 09 Feb 2021 14:04:58 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D1FC980196E for ; Tue, 9 Feb 2021 19:04:57 +0000 (UTC) Received: from dgilbert-t580.localhost (ovpn-112-66.ams2.redhat.com [10.36.112.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5729C60C04; Tue, 9 Feb 2021 19:04:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612897500; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4hyC0DoLv2hnyPTPX8CUYqMiRQq6B9qtchp08JRsbNU=; b=OnERQyh7rRKjTYAnWx2psMR6Va/l7/s9R+IiMjuWZKNJktfByQoSw88PtZTs3SusIqkMSQ G0yU9wtNJpO7DamVmY772ZmSzXfDtgZGwmuDIJOa/dDDcpVvhmXzyOdH13Yfu6ojxuS5gx p1+0DlXWxAVPolHSZNrmgolcjIzd7M4= X-MC-Unique: 2YhafU3HOKKjtIXZ8-GVFQ-1 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org, vgoyal@redhat.com, stefanha@redhat.com, virtio-fs@redhat.com, marcandre.lureau@redhat.com, mst@redhat.com Subject: [PATCH 12/24] DAX: virtiofsd: Wire up passthrough_ll's lo_setupmapping Date: Tue, 9 Feb 2021 19:02:12 +0000 Message-Id: <20210209190224.62827-13-dgilbert@redhat.com> In-Reply-To: <20210209190224.62827-1-dgilbert@redhat.com> References: <20210209190224.62827-1-dgilbert@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dgilbert@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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: pass client-ip=63.128.21.124; envelope-from=dgilbert@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.57, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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 @redhat.com) Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" Wire up passthrough_ll's setupmapping to allocate, send to virtio and then reply OK. Guest might not pass file pointer. In that case using inode info, open the file again, mmap() and close fd. Signed-off-by: Dr. David Alan Gilbert Signed-off-by: Vivek Goyal With fix from: Signed-off-by: Fotis Xenakis Reviewed-by: Stefan Hajnoczi --- tools/virtiofsd/fuse_lowlevel.c | 13 ++++++-- tools/virtiofsd/passthrough_ll.c | 52 ++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/tools/virtiofsd/fuse_lowlevel.c b/tools/virtiofsd/fuse_lowleve= l.c index 0d3768b7d0..f74583e095 100644 --- a/tools/virtiofsd/fuse_lowlevel.c +++ b/tools/virtiofsd/fuse_lowlevel.c @@ -1897,8 +1897,17 @@ static void do_setupmapping(fuse_req_t req, fuse_ino= _t nodeid, } =20 if (req->se->op.setupmapping) { - req->se->op.setupmapping(req, nodeid, arg->foffset, arg->len, - arg->moffset, genflags, &fi); + /* + * TODO: Add a flag to request which tells if arg->fh is + * valid or not. + */ + if (fi.fh =3D=3D (uint64_t)-1) { + req->se->op.setupmapping(req, nodeid, arg->foffset, arg->len, + arg->moffset, genflags, NULL); + } else { + req->se->op.setupmapping(req, nodeid, arg->foffset, arg->len, + arg->moffset, genflags, &fi); + } } else { fuse_reply_err(req, ENOSYS); } diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough= _ll.c index 31c43d67a0..0493f00756 100644 --- a/tools/virtiofsd/passthrough_ll.c +++ b/tools/virtiofsd/passthrough_ll.c @@ -2967,8 +2967,56 @@ static void lo_setupmapping(fuse_req_t req, fuse_ino= _t ino, uint64_t foffset, uint64_t len, uint64_t moffset, uint64_t flags, struct fuse_file_info *fi) { - /* TODO */ - fuse_reply_err(req, ENOSYS); + struct lo_data *lo =3D lo_data(req); + int ret =3D 0, fd; + VhostUserFSSlaveMsg msg =3D { 0 }; + uint64_t vhu_flags; + char *buf; + bool writable =3D flags & O_RDWR; + + fuse_log(FUSE_LOG_DEBUG, + "lo_setupmapping(ino=3D%" PRIu64 ", fi=3D0x%p," + " foffset=3D%" PRIu64 ", len=3D%" PRIu64 ", moffset=3D%" PRIu= 64 + ", flags=3D%" PRIu64 ")\n", + ino, (void *)fi, foffset, len, moffset, flags); + + vhu_flags =3D VHOST_USER_FS_FLAG_MAP_R; + if (writable) { + vhu_flags |=3D VHOST_USER_FS_FLAG_MAP_W; + } + + msg.fd_offset[0] =3D foffset; + msg.len[0] =3D len; + msg.c_offset[0] =3D moffset; + msg.flags[0] =3D vhu_flags; + + if (fi) { + fd =3D lo_fi_fd(req, fi); + } else { + ret =3D asprintf(&buf, "%i", lo_fd(req, ino)); + if (ret =3D=3D -1) { + return (void)fuse_reply_err(req, errno); + } + + fd =3D openat(lo->proc_self_fd, buf, flags); + free(buf); + if (fd =3D=3D -1) { + return (void)fuse_reply_err(req, errno); + } + } + + ret =3D fuse_virtio_map(req, &msg, fd); + if (ret < 0) { + fuse_log(FUSE_LOG_ERR, + "%s: map over virtio failed (ino=3D%" PRId64 + "fd=3D%d moffset=3D0x%" PRIx64 "). err =3D %d\n", + __func__, ino, fd, moffset, ret); + } + + if (!fi) { + close(fd); + } + fuse_reply_err(req, -ret); } =20 static void lo_removemapping(fuse_req_t req, struct fuse_session *se, --=20 2.29.2