Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751237Ab0HSB56 (ORCPT ); Wed, 18 Aug 2010 21:57:58 -0400 Received: from mga03.intel.com ([143.182.124.21]:51335 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750863Ab0HSB54 (ORCPT ); Wed, 18 Aug 2010 21:57:56 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.56,230,1280732400"; d="scan'208";a="314303560" Date: Thu, 19 Aug 2010 09:57:52 +0800 From: Wu Fengguang To: Naoya Horiguchi Cc: Andi Kleen , Andrew Morton , Christoph Lameter , Mel Gorman , "Jun'ichi Nomura" , linux-mm , LKML Subject: Re: [PATCH 9/9] hugetlb: add corrupted hugepage counter Message-ID: <20100819015752.GB5762@localhost> References: <1281432464-14833-1-git-send-email-n-horiguchi@ah.jp.nec.com> <1281432464-14833-10-git-send-email-n-horiguchi@ah.jp.nec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1281432464-14833-10-git-send-email-n-horiguchi@ah.jp.nec.com> User-Agent: Mutt/1.5.20 (2009-06-14) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1697 Lines: 50 > +void increment_corrupted_huge_page(struct page *page); > +void decrement_corrupted_huge_page(struct page *page); nitpick: increment/decrement are not verbs. > +void increment_corrupted_huge_page(struct page *hpage) > +{ > + struct hstate *h = page_hstate(hpage); > + spin_lock(&hugetlb_lock); > + h->corrupted_huge_pages++; > + spin_unlock(&hugetlb_lock); > +} > + > +void decrement_corrupted_huge_page(struct page *hpage) > +{ > + struct hstate *h = page_hstate(hpage); > + spin_lock(&hugetlb_lock); > + BUG_ON(!h->corrupted_huge_pages); There is no point to have BUG_ON() here: /* * Don't use BUG() or BUG_ON() unless there's really no way out; one * example might be detecting data structure corruption in the middle * of an operation that can't be backed out of. If the (sub)system * can somehow continue operating, perhaps with reduced functionality, * it's probably not BUG-worthy. * * If you're tempted to BUG(), think again: is completely giving up * really the *only* solution? There are usually better options, where * users don't need to reboot ASAP and can mostly shut down cleanly. */ And there is a race case that (corrupted_huge_pages==0)! Suppose the user space calls unpoison_memory() on a good pfn, and the page happen to be hwpoisoned between lock_page() and TestClearPageHWPoison(), corrupted_huge_pages will go negative. Thanks, Fengguang > + h->corrupted_huge_pages--; > + spin_unlock(&hugetlb_lock); > +} -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/