Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libpuffs Add an error handler which syslogs but does not...



details:   https://anonhg.NetBSD.org/src/rev/df4a0ac483d0
branches:  trunk
changeset: 749683:df4a0ac483d0
user:      pooka <pooka%NetBSD.org@localhost>
date:      Sat Dec 05 20:54:10 2009 +0000

description:
Add an error handler which syslogs but does not abort() and make it
the default.  Most servers just shovel bits from their backend to
the kernel without checking the contents and dumping core in case
the backend gives garbage is a bit harsh.

diffstat:

 lib/libpuffs/puffs.c |  20 +++++++++++++++-----
 lib/libpuffs/puffs.h |   6 +++++-
 2 files changed, 20 insertions(+), 6 deletions(-)

diffs (75 lines):

diff -r fb3be4f0912c -r df4a0ac483d0 lib/libpuffs/puffs.c
--- a/lib/libpuffs/puffs.c      Sat Dec 05 20:34:28 2009 +0000
+++ b/lib/libpuffs/puffs.c      Sat Dec 05 20:54:10 2009 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: puffs.c,v 1.100 2009/10/18 19:09:20 pooka Exp $        */
+/*     $NetBSD: puffs.c,v 1.101 2009/12/05 20:54:10 pooka Exp $        */
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if !defined(lint)
-__RCSID("$NetBSD: puffs.c,v 1.100 2009/10/18 19:09:20 pooka Exp $");
+__RCSID("$NetBSD: puffs.c,v 1.101 2009/12/05 20:54:10 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/param.h>
@@ -121,8 +121,8 @@
 }
 
 /*ARGSUSED*/
-static void
-puffs_defaulterror(struct puffs_usermount *pu, uint8_t type,
+void
+puffs_kernerr_abort(struct puffs_usermount *pu, uint8_t type,
        int error, const char *str, puffs_cookie_t cookie)
 {
 
@@ -131,6 +131,16 @@
        abort();
 }
 
+/*ARGSUSED*/
+void
+puffs_kernerr_log(struct puffs_usermount *pu, uint8_t type,
+       int error, const char *str, puffs_cookie_t cookie)
+{
+
+       syslog(LOG_WARNING, "kernel: type %d, error %d, cookie %p (%s)\n",
+           type, error, cookie, str);
+}
+
 int
 puffs_getselectable(struct puffs_usermount *pu)
 {
@@ -664,7 +674,7 @@
        pu->pu_pathtransform = NULL;
        pu->pu_namemod = NULL;
 
-       pu->pu_errnotify = puffs_defaulterror;
+       pu->pu_errnotify = puffs_kernerr_log;
 
        PU_SETSTATE(pu, PUFFS_STATE_BEFOREMOUNT);
 
diff -r fb3be4f0912c -r df4a0ac483d0 lib/libpuffs/puffs.h
--- a/lib/libpuffs/puffs.h      Sat Dec 05 20:34:28 2009 +0000
+++ b/lib/libpuffs/puffs.h      Sat Dec 05 20:54:10 2009 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: puffs.h,v 1.112 2009/10/18 19:09:20 pooka Exp $        */
+/*     $NetBSD: puffs.h,v 1.113 2009/12/05 20:54:10 pooka Exp $        */
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -591,6 +591,10 @@
 void   puffs_set_namemod(struct puffs_usermount *, pu_namemod_fn);
 
 void   puffs_set_errnotify(struct puffs_usermount *, pu_errnotify_fn);
+void   puffs_kernerr_log(struct puffs_usermount *, uint8_t, int,
+                         const char *, puffs_cookie_t);
+void   puffs_kernerr_abort(struct puffs_usermount *, uint8_t, int,
+                           const char *, puffs_cookie_t);
 void   puffs_set_prepost(struct puffs_usermount *,
                          pu_prepost_fn, pu_prepost_fn);
 void   puffs_set_cmap(struct puffs_usermount *, pu_cmap_fn);



Home | Main Index | Thread Index | Old Index