From nobody Mon Feb 9 04:29:48 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=1618416713; cv=none; d=zohomail.com; s=zohoarc; b=Ou90A8Tx1EAvRsKf+5vx0WhzLozXRh0cFcTjNnn3BsXD1p2SSz5XxnEK4IvPAQLfmRarR/l27R6wqL7OtUcxox542CsWbixHVovb9ukbYDxp8H8BfRGdYP916dlgY13Qp0udB1RxRIC1eyv/vDH9LbpBrjdCg2p3f3SaNFs2t3w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618416713; 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=T1Lp37nDTzxhktVKNAkCVWkDxTs+dX1WDirPBWT9+1Q=; b=SSHFUmf0f9B8qOPkJDKWJGi7qeDv0qi7GE07Lhxp+z1LxG+RmMOs5lNBFH/nOfu1Mh+8qBPBygQPsexUs/zBbdokeXh30DNiynBEBNlsPrSl2k9K2Z2tTBhBnWHqMJGpBqtSjRjLtgo700hO7ARwYKkXWNImvrYP/xYEuu0KpCk= 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 1618416713053628.2545354233765; Wed, 14 Apr 2021 09:11:53 -0700 (PDT) Received: from localhost ([::1]:36578 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lWi7K-0007Vr-Oz for importer@patchew.org; Wed, 14 Apr 2021 12:11:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34310) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWhoF-0008Ay-Ei for qemu-devel@nongnu.org; Wed, 14 Apr 2021 11:52:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:25978) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWhoD-0000Oa-B6 for qemu-devel@nongnu.org; Wed, 14 Apr 2021 11:52:07 -0400 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-443-AdOgLyivMHCU_YZA69Mz4Q-1; Wed, 14 Apr 2021 11:52:02 -0400 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 A14AE1007293 for ; Wed, 14 Apr 2021 15:52:01 +0000 (UTC) Received: from dgilbert-t580.localhost (ovpn-115-158.ams2.redhat.com [10.36.115.158]) by smtp.corp.redhat.com (Postfix) with ESMTP id 950E2610A8; Wed, 14 Apr 2021 15:52:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1618415524; 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=T1Lp37nDTzxhktVKNAkCVWkDxTs+dX1WDirPBWT9+1Q=; b=a/lUcNaF4C4JtOJUJexFIs8yJAdjVl6J13xOxwokQnVt4mNGv71QH91m/iXk8J7l39Mchg nVZaWkO5EpQSLzgL8yBgv0f7P2eymVa9rcqNHktHgQf+nazDEITbjM4kQU8vZfSojGbBvJ kunvJc4gwOE+ganFj7Iwmvj6EspoHrs= X-MC-Unique: AdOgLyivMHCU_YZA69Mz4Q-1 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org, stefanha@redhat.com, vgoyal@redhat.com, virtio-fs@redhat.com Subject: [PATCH v2 13/25] DAX: virtiofsd: Wire up passthrough_ll's lo_setupmapping Date: Wed, 14 Apr 2021 16:51:25 +0100 Message-Id: <20210414155137.46522-14-dgilbert@redhat.com> In-Reply-To: <20210414155137.46522-1-dgilbert@redhat.com> References: <20210414155137.46522-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=216.205.24.124; envelope-from=dgilbert@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, 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 | 57 ++++++++++++++++++++++++++++++-- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/tools/virtiofsd/fuse_lowlevel.c b/tools/virtiofsd/fuse_lowleve= l.c index 1a00307879..81c4c2b373 100644 --- a/tools/virtiofsd/fuse_lowlevel.c +++ b/tools/virtiofsd/fuse_lowlevel.c @@ -1899,8 +1899,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 afa86650c1..bf7a7f3c23 100644 --- a/tools/virtiofsd/passthrough_ll.c +++ b/tools/virtiofsd/passthrough_ll.c @@ -3148,8 +3148,61 @@ 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 g_malloc0(sizeof(VhostUserFSSlaveMsg) + + sizeof(VhostUserFSSlaveMsgEntry)); + 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->count =3D 1; + msg->entries[0].fd_offset =3D foffset; + msg->entries[0].len =3D len; + msg->entries[0].c_offset =3D moffset; + msg->entries[0].flags =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) { + g_free(msg); + return (void)fuse_reply_err(req, errno); + } + + fd =3D openat(lo->proc_self_fd, buf, flags); + free(buf); + if (fd =3D=3D -1) { + g_free(msg); + 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); + g_free(msg); } =20 static void lo_removemapping(fuse_req_t req, struct fuse_session *se, --=20 2.31.1