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