From patchwork Mon Jun 27 09:41:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kurz X-Patchwork-Id: 9200191 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8AF0360B16 for ; Mon, 27 Jun 2016 09:41:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7A354284D4 for ; Mon, 27 Jun 2016 09:41:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6F0D728564; Mon, 27 Jun 2016 09:41:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D98132856F for ; Mon, 27 Jun 2016 09:41:50 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=sfs-ml-3.v29.ch3.sourceforge.com) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1bHT32-0003EB-3N; Mon, 27 Jun 2016 09:41:44 +0000 Received: from sog-mx-4.v43.ch3.sourceforge.com ([172.29.43.194] helo=mx.sourceforge.net) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1bHT30-0003E5-QX for v9fs-developer@lists.sourceforge.net; Mon, 27 Jun 2016 09:41:42 +0000 Received-SPF: softfail (sog-mx-4.v43.ch3.sourceforge.com: transitioning domain of kaod.org does not designate 148.163.158.5 as permitted sender) client-ip=148.163.158.5; envelope-from=groug@kaod.org; helo=mx0a-001b2d01.pphosted.com; Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5] helo=mx0a-001b2d01.pphosted.com) by sog-mx-4.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.76) id 1bHT2z-0007CY-WB for v9fs-developer@lists.sourceforge.net; Mon, 27 Jun 2016 09:41:42 +0000 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.11/8.16.0.11) with SMTP id u5R9dIto136540 for ; Mon, 27 Jun 2016 05:41:36 -0400 Received: from e38.co.us.ibm.com (e38.co.us.ibm.com [32.97.110.159]) by mx0b-001b2d01.pphosted.com with ESMTP id 23sm3tfpux-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 27 Jun 2016 05:41:36 -0400 Received: from localhost by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 27 Jun 2016 03:41:35 -0600 Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e38.co.us.ibm.com (192.168.1.138) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 27 Jun 2016 03:41:33 -0600 X-IBM-Helo: d03dlp03.boulder.ibm.com X-IBM-MailFrom: groug@kaod.org Received: from b03cxnp07028.gho.boulder.ibm.com (b03cxnp07028.gho.boulder.ibm.com [9.17.130.15]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id D1C3419D8026; Mon, 27 Jun 2016 03:41:10 -0600 (MDT) Received: from b03ledav003.gho.boulder.ibm.com (b03ledav003.gho.boulder.ibm.com [9.17.130.234]) by b03cxnp07028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u5R9fWbW51642544; Mon, 27 Jun 2016 02:41:32 -0700 Received: from b03ledav003.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9093C6A03F; Mon, 27 Jun 2016 03:41:32 -0600 (MDT) Received: from bahia.lan (unknown [9.164.189.130]) by b03ledav003.gho.boulder.ibm.com (Postfix) with ESMTP id 556456A03B; Mon, 27 Jun 2016 03:41:30 -0600 (MDT) From: Greg Kurz To: qemu-devel@nongnu.org Date: Mon, 27 Jun 2016 11:41:28 +0200 In-Reply-To: <146702045511.5764.17551224268217330628.stgit@bahia.lan> References: <146702045511.5764.17551224268217330628.stgit@bahia.lan> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16062709-0028-0000-0000-0000050B38E9 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16062709-0029-0000-0000-00002D04B5D3 Message-Id: <146702048893.5764.17454103249529126852.stgit@bahia.lan> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-06-27_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=3 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1604210000 definitions=main-1606270110 X-Headers-End: 1bHT2z-0007CY-WB Cc: Eric Van Hensbergen , v9fs-developer@lists.sourceforge.net, "Aneesh Kumar K.V" , Greg Kurz Subject: [V9fs-developer] [PATCH 04/13] 9p: getattr: use fstat if we have a fd X-BeenThere: v9fs-developer@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: v9fs-developer-bounces@lists.sourceforge.net X-Virus-Scanned: ClamAV using ClamSMTP If we have an opened fd, it is better to call fstat() as the underlying file may have been unlinked and lstat() will fail. The fid_has_file() helper will be used by other file descriptor based ops. Signed-off-by: Greg Kurz --- hw/9pfs/9p.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 626d4aa8ebb6..3301cef0980d 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -253,6 +253,23 @@ int v9fs_get_fd_fid(int fid_type, V9fsFidOpenState *fs) return fd; } +static bool fid_has_file(V9fsFidState *fidp) +{ + int fid_type = fidp->fid_type; + + if (fid_type == P9_FID_DIR) { + if (fidp->fs.dir.stream) { + return true; + } + } else if (fid_type == P9_FID_FILE) { + if (fidp->fs.fd > -1) { + return true; + } + } + + return false; +} + static V9fsFidState *get_fid(V9fsPDU *pdu, int32_t fid) { int err; @@ -1044,6 +1061,19 @@ out_nofid: v9fs_string_free(&aname); } +static int v9fs_do_stat(V9fsPDU *pdu, V9fsFidState *fidp, struct stat *stbuf) +{ + int retval; + + if (fid_has_file(fidp)) { + retval = v9fs_co_fstat(pdu, fidp, stbuf); + } else { + retval = v9fs_co_lstat(pdu, &fidp->path, stbuf); + } + + return retval; +} + static void v9fs_stat(void *opaque) { int32_t fid; @@ -1065,7 +1095,7 @@ static void v9fs_stat(void *opaque) err = -ENOENT; goto out_nofid; } - err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); + err = v9fs_do_stat(pdu, fidp, &stbuf); if (err < 0) { goto out; } @@ -1115,7 +1145,7 @@ static void v9fs_getattr(void *opaque) * Currently we only support BASIC fields in stat, so there is no * need to look at request_mask. */ - retval = v9fs_co_lstat(pdu, &fidp->path, &stbuf); + retval = v9fs_do_stat(pdu, fidp, &stbuf); if (retval < 0) { goto out; } @@ -2674,7 +2704,7 @@ static void v9fs_wstat(void *opaque) } if (v9stat.mode != -1) { uint32_t v9_mode; - err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); + err = v9fs_do_stat(pdu, fidp, &stbuf); if (err < 0) { goto out; }