Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-7]: src Pull up following revision(s) (requested by manu in ticke...
details: https://anonhg.NetBSD.org/src/rev/55d8bdffc2f5
branches: netbsd-7
changeset: 798292:55d8bdffc2f5
user: martin <martin%NetBSD.org@localhost>
date: Sun Aug 24 08:42:06 2014 +0000
description:
Pull up following revision(s) (requested by manu in ticket #52):
lib/libperfuse/perfuse_priv.h: revision 1.33
lib/libperfuse/ops.c: revision 1.67
lib/libpuffs/dispatcher.c: revision 1.47
lib/libperfuse/perfuse_priv.h: revision 1.34
lib/libperfuse/ops.c: revision 1.68
lib/libperfuse/ops.c: revision 1.69
lib/libpuffs/puffs_ops.3: revision 1.37
lib/libpuffs/puffs_ops.3: revision 1.38
lib/libperfuse/perfuse.c: revision 1.32
lib/libperfuse/perfuse.c: revision 1.33
usr.sbin/perfused/msg.c: revision 1.22
lib/libpuffs/puffs.h: revision 1.125
Implement FUSE direct I/O.
Remove useless code and warnings
diffstat:
lib/libperfuse/ops.c | 41 ++++++++++++++---------------------------
lib/libperfuse/perfuse.c | 9 ++++-----
lib/libperfuse/perfuse_priv.h | 8 +++-----
lib/libpuffs/dispatcher.c | 12 ++++++++++--
lib/libpuffs/puffs.h | 8 ++++++--
lib/libpuffs/puffs_ops.3 | 16 ++++++++++++++--
usr.sbin/perfused/msg.c | 7 +++++--
7 files changed, 56 insertions(+), 45 deletions(-)
diffs (286 lines):
diff -r 38bde7500f08 -r 55d8bdffc2f5 lib/libperfuse/ops.c
--- a/lib/libperfuse/ops.c Sun Aug 24 08:34:58 2014 +0000
+++ b/lib/libperfuse/ops.c Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ops.c,v 1.66 2014/08/10 03:22:33 manu Exp $ */
+/* $NetBSD: ops.c,v 1.66.2.1 2014/08/24 08:42:06 martin Exp $ */
/*-
* Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -1338,6 +1338,13 @@
perfuse_node_open(struct puffs_usermount *pu, puffs_cookie_t opc, int mode,
const struct puffs_cred *pcr)
{
+ return perfuse_node_open2(pu, opc, mode, pcr, NULL);
+}
+
+int
+perfuse_node_open2(struct puffs_usermount *pu, puffs_cookie_t opc, int mode,
+ const struct puffs_cred *pcr, int *oflags)
+{
struct perfuse_state *ps;
struct perfuse_node_data *pnd;
perfuse_msg_t *pm;
@@ -1439,6 +1446,12 @@
*/
perfuse_new_fh(opc, foo->fh, mode);
+ /*
+ * Set direct I/O if the filesystems forces it
+ */
+ if ((foo->open_flags & FUSE_FOPEN_DIRECT_IO) && (oflags != NULL))
+ *oflags |= PUFFS_OPEN_IO_DIRECT;
+
#ifdef PERFUSE_DEBUG
if (perfuse_diagflags & (PDF_FH|PDF_FILENAME))
DPRINTF("%s: opc = %p, file = \"%s\", "
@@ -1947,17 +1960,6 @@
return error;
}
-/* ARGSUSED0 */
-int
-perfuse_node_mmap(struct puffs_usermount *pu, puffs_cookie_t opc, int flags,
- const struct puffs_cred *pcr)
-{
- /*
- * Not implemented anymore in libfuse
- */
- return ENOSYS;
-}
-
/* ARGSUSED2 */
int
perfuse_node_fsync(struct puffs_usermount *pu, puffs_cookie_t opc,
@@ -2072,14 +2074,6 @@
return error;
}
-/* ARGSUSED0 */
-int
-perfuse_node_seek(struct puffs_usermount *pu, puffs_cookie_t opc,
- off_t oldoff, off_t newoff, const struct puffs_cred *pcr)
-{
- return 0;
-}
-
int
perfuse_node_remove(struct puffs_usermount *pu, puffs_cookie_t opc,
puffs_cookie_t targ, const struct puffs_cn *pcn)
@@ -3031,11 +3025,6 @@
if (vap->va_type == VDIR)
return EISDIR;
- if ((u_quad_t)offset + *resid > vap->va_size)
- DWARNX("%s %p read %lld@%zu beyond EOF %" PRIu64 "\n",
- __func__, (void *)opc, (long long)offset,
- *resid, vap->va_size);
-
do {
size_t max_read;
@@ -3150,8 +3139,6 @@
* we get the latest value.
*/
if (ioflag & PUFFS_IO_APPEND) {
- DWARNX("%s: PUFFS_IO_APPEND set, untested code", __func__);
-
if ((error = perfuse_node_getattr(pu, opc, vap, pcr)) != 0)
goto out;
diff -r 38bde7500f08 -r 55d8bdffc2f5 lib/libperfuse/perfuse.c
--- a/lib/libperfuse/perfuse.c Sun Aug 24 08:34:58 2014 +0000
+++ b/lib/libperfuse/perfuse.c Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: perfuse.c,v 1.31 2012/09/10 13:56:18 manu Exp $ */
+/* $NetBSD: perfuse.c,v 1.31.10.1 2014/08/24 08:42:06 martin Exp $ */
/*-
* Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -471,11 +471,7 @@
PUFFSOP_SET(pops, perfuse, node, getattr);
PUFFSOP_SET(pops, perfuse, node, setattr);
PUFFSOP_SET(pops, perfuse, node, poll);
-#if 0
- PUFFSOP_SET(pops, perfuse, node, mmap);
-#endif
PUFFSOP_SET(pops, perfuse, node, fsync);
- PUFFSOP_SET(pops, perfuse, node, seek);
PUFFSOP_SET(pops, perfuse, node, remove);
PUFFSOP_SET(pops, perfuse, node, link);
PUFFSOP_SET(pops, perfuse, node, rename);
@@ -503,6 +499,9 @@
#ifdef PUFFS_SETATTR_FAF
PUFFSOP_SET(pops, perfuse, node, write2);
#endif /* PUFFS_SETATTR_FAF */
+#ifdef PUFFS_OPEN_IO_DIRECT
+ PUFFSOP_SET(pops, perfuse, node, open2);
+#endif /* PUFFS_OPEN_IO_DIRECT */
/*
* PUFFS_KFLAG_NOCACHE_NAME is required so that we can see changes
diff -r 38bde7500f08 -r 55d8bdffc2f5 lib/libperfuse/perfuse_priv.h
--- a/lib/libperfuse/perfuse_priv.h Sun Aug 24 08:34:58 2014 +0000
+++ b/lib/libperfuse/perfuse_priv.h Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: perfuse_priv.h,v 1.32 2014/08/10 03:22:33 manu Exp $ */
+/* $NetBSD: perfuse_priv.h,v 1.32.2.1 2014/08/24 08:42:06 martin Exp $ */
/*-
* Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -223,12 +223,8 @@
int perfuse_node_setattr(struct puffs_usermount *,
puffs_cookie_t, const struct vattr *, const struct puffs_cred *);
int perfuse_node_poll(struct puffs_usermount *, puffs_cookie_t, int *);
-int perfuse_node_mmap(struct puffs_usermount *,
- puffs_cookie_t, vm_prot_t, const struct puffs_cred *);
int perfuse_node_fsync(struct puffs_usermount *,
puffs_cookie_t, const struct puffs_cred *, int, off_t, off_t);
-int perfuse_node_seek(struct puffs_usermount *,
- puffs_cookie_t, off_t, off_t, const struct puffs_cred *);
int perfuse_node_remove(struct puffs_usermount *,
puffs_cookie_t, puffs_cookie_t, const struct puffs_cn *);
int perfuse_node_link(struct puffs_usermount *,
@@ -262,6 +258,8 @@
uint8_t *, off_t, size_t *, const struct puffs_cred *, int);
int perfuse_node_write2(struct puffs_usermount *, puffs_cookie_t,
uint8_t *, off_t, size_t *, const struct puffs_cred *, int, int);
+int perfuse_node_open2(struct puffs_usermount *,
+ puffs_cookie_t, int, const struct puffs_cred *, int *);
void perfuse_cache_write(struct puffs_usermount *,
puffs_cookie_t, size_t, struct puffs_cacherun *);
int perfuse_node_getextattr(struct puffs_usermount *, puffs_cookie_t,
diff -r 38bde7500f08 -r 55d8bdffc2f5 lib/libpuffs/dispatcher.c
--- a/lib/libpuffs/dispatcher.c Sun Aug 24 08:34:58 2014 +0000
+++ b/lib/libpuffs/dispatcher.c Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dispatcher.c,v 1.46 2013/11/06 19:56:38 christos Exp $ */
+/* $NetBSD: dispatcher.c,v 1.46.4.1 2014/08/24 08:42:06 martin Exp $ */
/*
* Copyright (c) 2006, 2007, 2008 Antti Kantee. All Rights Reserved.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#if !defined(lint)
-__RCSID("$NetBSD: dispatcher.c,v 1.46 2013/11/06 19:56:38 christos Exp $");
+__RCSID("$NetBSD: dispatcher.c,v 1.46.4.1 2014/08/24 08:42:06 martin Exp $");
#endif /* !lint */
#include <sys/types.h>
@@ -412,6 +412,14 @@
struct puffs_vnmsg_open *auxt = auxbuf;
PUFFS_MAKECRED(pcr, &auxt->pvnr_cred);
+ if (pops->puffs_node_open2 != NULL) {
+ error = pops->puffs_node_open2(pu,
+ opcookie, auxt->pvnr_mode, pcr,
+ &auxt->pvnr_oflags);
+
+ break;
+ }
+
if (pops->puffs_node_open == NULL) {
error = 0;
break;
diff -r 38bde7500f08 -r 55d8bdffc2f5 lib/libpuffs/puffs.h
--- a/lib/libpuffs/puffs.h Sun Aug 24 08:34:58 2014 +0000
+++ b/lib/libpuffs/puffs.h Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: puffs.h,v 1.124 2012/08/16 09:25:44 manu Exp $ */
+/* $NetBSD: puffs.h,v 1.124.10.1 2014/08/24 08:42:06 martin Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
@@ -250,6 +250,8 @@
uint8_t *, off_t, size_t *, const struct puffs_cred *, int, int);
int (*puffs_node_reclaim2)(struct puffs_usermount *,
puffs_cookie_t, int);
+ int (*puffs_node_open2)(struct puffs_usermount *,
+ puffs_cookie_t, int, const struct puffs_cred *, int *);
void *puffs_ops_spare[28];
};
@@ -410,7 +412,9 @@
puffs_cookie_t, uint8_t *, off_t, size_t *, \
const struct puffs_cred *, int, int); \
int fsname##_node_reclaim2(struct puffs_usermount *, \
- puffs_cookie_t, int);
+ puffs_cookie_t, int); \
+ int fsname##_node_open2(struct puffs_usermount *, \
+ puffs_cookie_t, int, const struct puffs_cred *, int *);
#define PUFFSOP_INIT(ops) \
diff -r 38bde7500f08 -r 55d8bdffc2f5 lib/libpuffs/puffs_ops.3
--- a/lib/libpuffs/puffs_ops.3 Sun Aug 24 08:34:58 2014 +0000
+++ b/lib/libpuffs/puffs_ops.3 Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: puffs_ops.3,v 1.36 2012/08/16 11:28:38 wiz Exp $
+.\" $NetBSD: puffs_ops.3,v 1.36.10.1 2014/08/24 08:42:06 martin Exp $
.\"
.\" Copyright (c) 2007 Antti Kantee. All rights reserved.
.\"
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd August 16, 2012
+.Dd August 16, 2014
.Dt PUFFS_OPS 3
.Os
.Sh NAME
@@ -83,6 +83,11 @@
.Fa "const struct puffs_cred *pcr"
.Fc
.Ft int
+.Fo puffs_node_open2
+.Fa "struct puffs_usermount *pu" "puffs_cookie_t opc" "int modep"
+.Fa "const struct puffs_cred *pcr" "int *oflags"
+.Fc
+.Ft int
.Fo puffs_node_close
.Fa "struct puffs_usermount *pu" "puffs_cookie_t opc" "int flags"
.Fa "const struct puffs_cred *pcr"
@@ -481,6 +486,7 @@
In case of mknod, the device identifier can be found in
.Fa va-\*[Gt]va_rdev .
.It Fn puffs_node_open "pu" "opc" "mode" "pcr"
+.It Fn puffs_node_open2 "pu" "opc" "mode" "pcr" "oflags"
Open the node denoted by the cookie
.Fa opc .
The parameter
@@ -491,6 +497,12 @@
.Dv O_APPEND
and
.Dv O_NONBLOCK .
+.Fn puffs_node_open2
+allows the filesystem to pass back information for the file in
+.Fa oflags .
+The only implemented flag for now is
+.Dv PUFFS_OPEN_IO_DIRECT
+that cause file read/write to bypass the page cache.
.It Fn puffs_node_close "pu" "opc" "flags" "pcr"
Close a node.
The parameter
diff -r 38bde7500f08 -r 55d8bdffc2f5 usr.sbin/perfused/msg.c
--- a/usr.sbin/perfused/msg.c Sun Aug 24 08:34:58 2014 +0000
+++ b/usr.sbin/perfused/msg.c Sun Aug 24 08:42:06 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.c,v 1.21 2012/07/21 05:49:42 manu Exp $ */
+/* $NetBSD: msg.c,v 1.21.10.1 2014/08/24 08:42:06 martin Exp $ */
/*-
* Copyright (c) 2010 Emmanuel Dreyfus. All rights reserved.
@@ -493,7 +493,10 @@
switch (readen = recv(fd, data, len, MSG_NOSIGNAL|MSG_PEEK)) {
case 0:
- perfused_panic();
+ DPRINTF("Filesystem exit\n");
+ /* NOTREACHED */
+ exit(0);
+ break;
case -1:
if (errno == EAGAIN)
return 0;
Home |
Main Index |
Thread Index |
Old Index