From owner-freebsd-hackers@FreeBSD.ORG Sun Apr 17 19:49:57 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0C91F106566B for ; Sun, 17 Apr 2011 19:49:57 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) Received: from esa-jnhn.mail.uoguelph.ca (esa-jnhn.mail.uoguelph.ca [131.104.91.44]) by mx1.freebsd.org (Postfix) with ESMTP id C09768FC12 for ; Sun, 17 Apr 2011 19:49:56 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AlYGAAZEq02DaFvO/2dsb2JhbACET5NMjjiyXo9EgSmDTnoEjgM X-IronPort-AV: E=Sophos;i="4.64,228,1301889600"; d="scan'208";a="118615383" Received: from erie.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.206]) by esa-jnhn-pri.mail.uoguelph.ca with ESMTP; 17 Apr 2011 15:49:48 -0400 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id 9BCB5B3F3A for ; Sun, 17 Apr 2011 15:49:48 -0400 (EDT) Date: Sun, 17 Apr 2011 15:49:48 -0400 (EDT) From: Rick Macklem To: freebsd-hackers@freebsd.org Message-ID: <397135152.167477.1303069788579.JavaMail.root@erie.cs.uoguelph.ca> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [172.17.91.202] X-Mailer: Zimbra 6.0.10_GA_2692 (ZimbraWebClient - IE7 (Win)/6.0.10_GA_2692) Subject: SMP question w.r.t. reading kernel variables X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Apr 2011 19:49:57 -0000 Hi, I should know the answer to this, but... When reading a global kernel variable, where its modifications are protected by a mutex, is it necessary to get the mutex lock to just read its value? For example: A if ((mp->mnt_kern_flag & MNTK_UNMOUNTF) != 0) return (EPERM); versus B MNT_ILOCK(mp); if ((mp->mnt_kern_flag & MNTK_UNMOUNTF) != 0) { MNT_IUNLOCK(mp); return (EPERM); } MNT_IUNLOCK(mp); My hunch is that B is necessary if you need an up-to-date value for the variable (mp->mnt_kern_flag in this case). Is that correct? Thanks in advance for help with this, rick