mount_9p: fix writing to a file opened with write-only mode
With the page cache, writing data to a file may demand to read contents from a storage to fill a page in the page cache first. Opening a file with write-only mode by a user lets a mount_9p process open a file with write-only mode too at a 9p server. Thus, a read request to the file from the page cache fails. So we need to open a file always with read mode (internally) even if it is opened with write-only mode by a user. Note that the change doesn't mean that mount_9p allows users to read contents from a file that is opened with write-only mode.
This commit is contained in:
parent
08a9f63190
commit
ab2dc16550
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: node.c,v 1.29 2020/06/01 13:30:52 uwe Exp $ */
|
||||
/* $NetBSD: node.c,v 1.30 2022/03/02 04:11:41 ozaki-r Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Antti Kantee. All Rights Reserved.
|
||||
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
__RCSID("$NetBSD: node.c,v 1.29 2020/06/01 13:30:52 uwe Exp $");
|
||||
__RCSID("$NetBSD: node.c,v 1.30 2022/03/02 04:11:41 ozaki-r Exp $");
|
||||
#endif /* !lint */
|
||||
|
||||
#include <assert.h>
|
||||
|
@ -274,6 +274,8 @@ puffs9p_node_open(struct puffs_usermount *pu, void *opc, int mode,
|
|||
|
||||
puffs_setback(pcc, PUFFS_SETBACK_INACT_N1);
|
||||
if (pn->pn_va.va_type != VDIR) {
|
||||
/* Always require read access for page cache */
|
||||
mode |= FREAD;
|
||||
if (mode & FREAD && p9n->fid_read == P9P_INVALFID) {
|
||||
nfid = NEXTFID(p9p);
|
||||
error = proto_cc_open(pu, p9n->fid_base, nfid,
|
||||
|
|
Loading…
Reference in New Issue