Module Name:    src
Committed By:   ozaki-r
Date:           Mon Jan  4 09:08:38 UTC 2016

Modified Files:
        src/sys/net: if.c if.h

Log Message:
Fix the destruction of the afdata lock

Pointed out by mlelstv@


To generate a diff of this commit:
cvs rdiff -u -r1.319 -r1.320 src/sys/net/if.c
cvs rdiff -u -r1.193 -r1.194 src/sys/net/if.h

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

Modified files:

Index: src/sys/net/if.c
diff -u src/sys/net/if.c:1.319 src/sys/net/if.c:1.320
--- src/sys/net/if.c:1.319	Fri Nov 20 08:10:36 2015
+++ src/sys/net/if.c	Mon Jan  4 09:08:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.319 2015/11/20 08:10:36 ozaki-r Exp $	*/
+/*	$NetBSD: if.c,v 1.320 2016/01/04 09:08:38 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -90,7 +90,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.319 2015/11/20 08:10:36 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.320 2016/01/04 09:08:38 ozaki-r Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -895,6 +895,8 @@ again:
 
 	ifioctl_detach(ifp);
 
+	IF_AFDATA_LOCK_DESTROY(ifp);
+
 	/*
 	 * remove packets that came from ifp, from software interrupt queues.
 	 */

Index: src/sys/net/if.h
diff -u src/sys/net/if.h:1.193 src/sys/net/if.h:1.194
--- src/sys/net/if.h:1.193	Fri Oct  2 03:08:26 2015
+++ src/sys/net/if.h	Mon Jan  4 09:08:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.h,v 1.193 2015/10/02 03:08:26 ozaki-r Exp $	*/
+/*	$NetBSD: if.h,v 1.194 2016/01/04 09:08:38 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -452,6 +452,8 @@ typedef struct ifnet {
 		(ifp)->if_afdata_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET); \
 	} while (0)
 
+#define	IF_AFDATA_LOCK_DESTROY(ifp)	mutex_obj_free((ifp)->if_afdata_lock)
+
 #define	IF_AFDATA_WLOCK(ifp)	mutex_enter((ifp)->if_afdata_lock)
 #define	IF_AFDATA_RLOCK(ifp)	mutex_enter((ifp)->if_afdata_lock)
 #define	IF_AFDATA_WUNLOCK(ifp)	mutex_exit((ifp)->if_afdata_lock)
@@ -459,7 +461,6 @@ typedef struct ifnet {
 #define	IF_AFDATA_LOCK(ifp)	IF_AFDATA_WLOCK(ifp)
 #define	IF_AFDATA_UNLOCK(ifp)	IF_AFDATA_WUNLOCK(ifp)
 #define	IF_AFDATA_TRYLOCK(ifp)	mutex_tryenter((ifp)->if_afdata_lock)
-#define	IF_AFDATA_DESTROY(ifp)	mutex_destroy((ifp)->if_afdata_lock)
 
 #define	IF_AFDATA_LOCK_ASSERT(ifp)	\
 	KASSERT(mutex_owned((ifp)->if_afdata_lock))
@@ -474,6 +475,8 @@ typedef struct ifnet {
 #define	IF_AFDATA_LOCK_INIT(ifp)	\
 	do {(ifp)->if_afdata_lock = rw_obj_alloc();} while (0)
 
+#define	IF_AFDATA_LOCK_DESTROY(ifp)	rw_obj_free((ifp)->if_afdata_lock)
+
 #define	IF_AFDATA_WLOCK(ifp)	rw_enter((ifp)->if_afdata_lock, RW_WRITER)
 #define	IF_AFDATA_RLOCK(ifp)	rw_enter((ifp)->if_afdata_lock, RW_READER)
 #define	IF_AFDATA_WUNLOCK(ifp)	rw_exit((ifp)->if_afdata_lock)
@@ -481,7 +484,6 @@ typedef struct ifnet {
 #define	IF_AFDATA_LOCK(ifp)	IF_AFDATA_WLOCK(ifp)
 #define	IF_AFDATA_UNLOCK(ifp)	IF_AFDATA_WUNLOCK(ifp)
 #define	IF_AFDATA_TRYLOCK(ifp)	rw_tryenter((ifp)->if_afdata_lock, RW_WRITER)
-#define	IF_AFDATA_DESTROY(ifp)	rw_destroy((ifp)->if_afdata_lock)
 
 #define	IF_AFDATA_LOCK_ASSERT(ifp)	\
 	KASSERT(rw_lock_held((ifp)->if_afdata_lock))

Reply via email to