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))