From patchwork Fri Nov 15 11:32:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiko Carstens X-Patchwork-Id: 3187781 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 3DF89C045B for ; Fri, 15 Nov 2013 11:33:54 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 784AC206F9 for ; Fri, 15 Nov 2013 11:33:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B08622096B for ; Fri, 15 Nov 2013 11:33:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758325Ab3KOLdm (ORCPT ); Fri, 15 Nov 2013 06:33:42 -0500 Received: from e06smtp14.uk.ibm.com ([195.75.94.110]:58561 "EHLO e06smtp14.uk.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753915Ab3KOLdk (ORCPT ); Fri, 15 Nov 2013 06:33:40 -0500 Received: from /spool/local by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 15 Nov 2013 11:33:38 -0000 Received: from d06dlp01.portsmouth.uk.ibm.com (9.149.20.13) by e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 15 Nov 2013 11:33:36 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id 2F83117D8068; Fri, 15 Nov 2013 11:33:17 +0000 (GMT) Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by b06cxnps4074.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id rAFBW7NG55902284; Fri, 15 Nov 2013 11:32:07 GMT Received: from d06av04.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id rAFBWHeo017936; Fri, 15 Nov 2013 04:32:19 -0700 Received: from localhost (dyn-9-152-212-74.boeblingen.de.ibm.com [9.152.212.74]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id rAFBWGjW017850; Fri, 15 Nov 2013 04:32:16 -0700 Date: Fri, 15 Nov 2013 12:32:16 +0100 From: Heiko Carstens To: Chris Mason Cc: Linus Torvalds , linux-btrfs@vger.kernel.org, lkml , Dulshani Gunawardhana , Gleb Natapov , Paolo Bonzini , Mark Brown Subject: Re: [GIT PULL] Btrfs Message-ID: <20131115113216.GA7777@osiris> References: <20131114171952.3802.93244@localhost.localdomain> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20131114171952.3802.93244@localhost.localdomain> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13111511-1948-0000-0000-000006E7CBB8 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Thu, Nov 14, 2013 at 12:19:52PM -0500, Chris Mason wrote: > Hi Linus, > > Please pull my for-linus branch: > > git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs.git for-linus > > This is our usual merge window set of bug fixes, performance > improvements and cleanups. Miao Xie has some really nice optimizations > for writeback. > > Josef also expanded our sanity checks quite a bit; these make up a big > chunk of the new lines. Hmm.. b19e68439375 "btrfs: Remove redundant local zero structure" seems to use the empty_zero_page incorrectly and causes this compile warning on s390: CC fs/btrfs/ioctl.o fs/btrfs/ioctl.c: In function 'btrfs_is_empty_uuid': fs/btrfs/ioctl.c:372:2: warning: passing argument 2 of 'memcmp' makes pointer from integer without a cast [enabled by default] return !memcmp(uuid, empty_zero_page, BTRFS_UUID_SIZE); ^ In fact there seem to be two more incorrect usages in the kernel. The patch below is not really tested. From c2a9d3a453629466f0528aacbc6cbecc4247cff5 Mon Sep 17 00:00:00 2001 From: Heiko Carstens Date: Fri, 15 Nov 2013 12:14:55 +0100 Subject: [PATCH] fix empty_zero_page misusage The definition of empty_zero_page is architecture specific. It is (currently) either a character array, an unsigned long containing the address of the empty_zero_page, or even worse only the address of the struct page belonging to the empty_zero_page. So using empty_zero_page as source address to e.g. clear something may give random results. ZERO_PAGE() however returns across all architectures the pointer to the struct page belonging to the empty_zero_page. Signed-off-by: Heiko Carstens --- drivers/spi/spi-fsl-cpm.c | 3 ++- fs/btrfs/ioctl.c | 4 +++- virt/kvm/kvm_main.c | 5 +++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/spi/spi-fsl-cpm.c b/drivers/spi/spi-fsl-cpm.c index 54b06376f03c..3807bbf8a48f 100644 --- a/drivers/spi/spi-fsl-cpm.c +++ b/drivers/spi/spi-fsl-cpm.c @@ -280,6 +280,7 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi) int fsl_spi_cpm_init(struct mpc8xxx_spi *mspi) { + const void *zero_page = (const void *) page_to_phys(ZERO_PAGE(0)); struct device *dev = mspi->dev; struct device_node *np = dev->of_node; const u32 *iprop; @@ -324,7 +325,7 @@ int fsl_spi_cpm_init(struct mpc8xxx_spi *mspi) goto err_bds; } - mspi->dma_dummy_tx = dma_map_single(dev, empty_zero_page, PAGE_SIZE, + mspi->dma_dummy_tx = dma_map_single(dev, zero_page, PAGE_SIZE, DMA_TO_DEVICE); if (dma_mapping_error(dev, mspi->dma_dummy_tx)) { dev_err(dev, "unable to map dummy tx buffer\n"); diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 1d04b5559e61..83f2b3e4fbf0 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -368,8 +368,10 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg) int btrfs_is_empty_uuid(u8 *uuid) { + const void *zero_page = (const void *) page_to_phys(ZERO_PAGE(0)); + BUILD_BUG_ON(BTRFS_UUID_SIZE > PAGE_SIZE); - return !memcmp(uuid, empty_zero_page, BTRFS_UUID_SIZE); + return !memcmp(uuid, zero_page, BTRFS_UUID_SIZE); } static noinline int create_subvol(struct inode *dir, diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 662f34c3287e..01edf1c19332 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1615,8 +1615,9 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len) { - return kvm_write_guest_page(kvm, gfn, (const void *) empty_zero_page, - offset, len); + const void *zero_page = (const void *) page_to_phys(ZERO_PAGE(0)); + + return kvm_write_guest_page(kvm, gfn, zero_page, offset, len); } EXPORT_SYMBOL_GPL(kvm_clear_guest_page);