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