Module Name:    src
Committed By:   pooka
Date:           Sat Dec  5 20:54:10 UTC 2009

Modified Files:
        src/lib/libpuffs: puffs.c puffs.h

Log Message:
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.


To generate a diff of this commit:
cvs rdiff -u -r1.100 -r1.101 src/lib/libpuffs/puffs.c
cvs rdiff -u -r1.112 -r1.113 src/lib/libpuffs/puffs.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libpuffs/puffs.c
diff -u src/lib/libpuffs/puffs.c:1.100 src/lib/libpuffs/puffs.c:1.101
--- src/lib/libpuffs/puffs.c:1.100	Sun Oct 18 19:09:20 2009
+++ src/lib/libpuffs/puffs.c	Sat Dec  5 20:54:10 2009
@@ -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);
 

Index: src/lib/libpuffs/puffs.h
diff -u src/lib/libpuffs/puffs.h:1.112 src/lib/libpuffs/puffs.h:1.113
--- src/lib/libpuffs/puffs.h:1.112	Sun Oct 18 19:09:20 2009
+++ src/lib/libpuffs/puffs.h	Sat Dec  5 20:54:10 2009
@@ -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);

Reply via email to