From patchwork Thu Jul 11 14:00:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 11040043 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 23A1914DB for ; Thu, 11 Jul 2019 14:00:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1515D285A5 for ; Thu, 11 Jul 2019 14:00:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 09178287EF; Thu, 11 Jul 2019 14:00:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AA4E6285A5 for ; Thu, 11 Jul 2019 14:00:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D4D538E0032; Thu, 11 Jul 2019 10:00:20 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id ACFDA8E00C1; Thu, 11 Jul 2019 10:00:20 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8ABC18E00BF; Thu, 11 Jul 2019 10:00:20 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id 215AA8E0032 for ; Thu, 11 Jul 2019 10:00:20 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id c31so4761490ede.5 for ; Thu, 11 Jul 2019 07:00:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=vL2nsiM2ddjwtUcwsMFcppuOiio9MXKDv4ZgGyw46eE=; b=dpiW+va/yU69bLew7mnNr+rp2v7nnB5vUFA2TsmLe/f3/nQ2t9Srz1CRfV+j1aJ64l wyBsvUqXimO5NZZ7tM2DsVbnf9h4FE3xYEHfjAZ+yZDBQgfvQREoMBcWk4LVzMNoZxSo 2zXlikuvqWIQCUSpc/kQQzGeZdWAV+eVCzx7kSadhRcuT9JVXqG5Mgxtrk1FV8waCJts XOPttFNuwQIYitlwt0sm9ncVVFgzc+r3I8nhJ8Fxq4CQ/L5kwFZgoWVKNk9f9ZAVOCxb X9/Httj7Fk5SZd1JZpByauT6dd5OZ9v6gP/IHkyRd2YNb0LT3aWkXh2JVLlF8EWXE0q4 ODcA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz X-Gm-Message-State: APjAAAWjA0V7K+FjTmr+UmYa9mQ7naqDHbioAsODV6tsS9VtRBIpY0AQ q3LSEtQEO/ryEvTFMAwX7zZTN0vEcaGia+jHjjWeoNZJmttM/ILuhXlrw+1OjvNrTqRaH3h82T2 GTNzZHRwNaj9VLobOwZHIVDhr5Hb+5MQwVr3lWfEEr2skq3zYSdP2vm6I62OOLYuaQw== X-Received: by 2002:a17:906:1281:: with SMTP id k1mr3389782ejb.212.1562853619700; Thu, 11 Jul 2019 07:00:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqzBl9WcqF6mdpPIo1kgARY3dzZ0eYueLZN38Ji+XL3qnP1MTkFV35dFJ2Ng5m6cgagWdNRS X-Received: by 2002:a17:906:1281:: with SMTP id k1mr3389569ejb.212.1562853617665; Thu, 11 Jul 2019 07:00:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562853617; cv=none; d=google.com; s=arc-20160816; b=AAzwXspK2KeAaShVdRgqKpA2dlupLmw9TJwheWz1cbCmHEnL1y1si0j4HwlgSkYNU5 TX2fQID/CFK+zCMGdzRxB5VZ6dQXdFSKHuyPACklQ0Go5jtkCuD50UgeR+DDmTZnOy2n +7JnGuSI0NLJgatyFKXf2buvrRbLUjEwqFl8NmlC6k9xOABFltI1B4GlwLmHbLImlvqT lrtsRIRJzlnUzKuQF5hH1X5HTJvubVx04abNfrJGtBZjFAL0QyI2Navn4lfQ3gswKRX6 YsRx673usGPQAbGh6g+ZJwW/OubGdZWY0aUfdyZY+h0jEl9hzx3obPsBiVOcTvt7xHP/ gcGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=vL2nsiM2ddjwtUcwsMFcppuOiio9MXKDv4ZgGyw46eE=; b=k4cA7GvkmTtxOt05k4pouAiSHIZXR2fxaObOVZsFlx1i824Aw2ik/mu+07ykJIMBQ2 enzI5y3QkEcQScke6fsRjD+fNc8DZ03JJvm6me271fmOEfwo8QuGbkhexicl3GTrPncJ e+sRF7ep23ofGe6EWlBZSRElyi/ZRYRV19k7sIrwYGmrH+xv/Uhy1mw9FL7eeJDPRgbB YEXNQimGdYeLMgFCbSar9EH5JbKpKMuRaCsXlz6KboG5nROfcSDPFJQLHQdJJJfWM3Jp tnomgXBATOhO5EUjt78bnZezBk3birb8IkfZSOwfImCxFu+SjVpeq3m5562I3j8mb018 rILQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz Received: from mx1.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id m34si3400766edc.296.2019.07.11.07.00.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jul 2019 07:00:17 -0700 (PDT) Received-SPF: pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) client-ip=195.135.220.15; Authentication-Results: mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id F326BAF10; Thu, 11 Jul 2019 14:00:16 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 274F01E43CA; Thu, 11 Jul 2019 16:00:16 +0200 (CEST) From: Jan Kara To: Cc: , , Amir Goldstein , Boaz Harrosh , Jan Kara , stable@vger.kernel.org Subject: [PATCH 1/3] mm: Handle MADV_WILLNEED through vfs_fadvise() Date: Thu, 11 Jul 2019 16:00:10 +0200 Message-Id: <20190711140012.1671-2-jack@suse.cz> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20190711140012.1671-1-jack@suse.cz> References: <20190711140012.1671-1-jack@suse.cz> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Currently handling of MADV_WILLNEED hint calls directly into readahead code. Handle it by calling vfs_fadvise() instead so that filesystem can use its ->fadvise() callback to acquire necessary locks or otherwise prepare for the request. Suggested-by: Amir Goldstein CC: stable@vger.kernel.org # Needed by "xfs: Fix stale data exposure when readahead races with hole punch" Signed-off-by: Jan Kara Reviewed-by: Boaz Harrosh --- mm/madvise.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index 628022e674a7..ae56d0ef337d 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -275,6 +276,7 @@ static long madvise_willneed(struct vm_area_struct *vma, unsigned long start, unsigned long end) { struct file *file = vma->vm_file; + loff_t offset; *prev = vma; #ifdef CONFIG_SWAP @@ -298,12 +300,20 @@ static long madvise_willneed(struct vm_area_struct *vma, return 0; } - start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; - if (end > vma->vm_end) - end = vma->vm_end; - end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; - - force_page_cache_readahead(file->f_mapping, file, start, end - start); + /* + * Filesystem's fadvise may need to take various locks. We need to + * explicitly grab a reference because the vma (and hence the + * vma's reference to the file) can go away as soon as we drop + * mmap_sem. + */ + *prev = NULL; /* tell sys_madvise we drop mmap_sem */ + get_file(file); + up_read(¤t->mm->mmap_sem); + offset = (loff_t)(start - vma->vm_start) + + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); + vfs_fadvise(file, offset, end - start, POSIX_FADV_WILLNEED); + fput(file); + down_read(¤t->mm->mmap_sem); return 0; } From patchwork Thu Jul 11 14:00:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 11040039 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 176816C5 for ; Thu, 11 Jul 2019 14:00:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 08D57285A5 for ; Thu, 11 Jul 2019 14:00:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F13B0287EF; Thu, 11 Jul 2019 14:00:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A23A1285C6 for ; Thu, 11 Jul 2019 14:00:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BBB738E00BE; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B79628E0032; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 85DD88E00BF; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by kanga.kvack.org (Postfix) with ESMTP id 323FD8E00BE for ; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id k22so4766373ede.0 for ; Thu, 11 Jul 2019 07:00:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=1pb0fF7x3AUZ7sT3Hdxp01Lg2ofbqblakH9rhiFJp7c=; b=YCaoMrxIHSNRM7NzRbhZKKkKDG80ULnVD883khaPgBW9Vl2tXeBlNxLJ4I7Xjtvf7a obuuorMzimLyEJTte2+wHLDLZSCIFPmYVXMbCAuD+uRCG5UvpdrKV0ZxcrhNdExVU1Bt R5iVQe45sYjA2H5EXHo35KTVzmNTswFT6UcFh8++dSFTso6XajQXtLGh9dxphr/0CaEP s2bWb1wQnck6Q9wWuQSVuNVuzVeXI6a/EOVUdNrJx+k/OTnvC9sbSR44RuWJ+CsrYEUM H2MWktxOe+vJzKWIoahfqOcSgCLMIntVYykVbHjn9T++EmOi1XTHrYcleOrdCdEnwXq4 K7+A== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz X-Gm-Message-State: APjAAAVFFWLsgH2p1ApULaX5X9e4kUASUbjZotpx7FWTgpN268x1JgDM 2vayTBmw58PENjEv0M7yF2G/D/QfWzJ302gLaggoF8wHwbeFO5woPn+J9spvEW4+yBXf/M/tdsl 7LNMpbfrGJDA3AdLH/NCvM1QGwGdRPrfuWM4nRMWT8P8ztu3Myd4Ha2eli6puQg9dzA== X-Received: by 2002:a17:906:304d:: with SMTP id d13mr3210041ejd.99.1562853618777; Thu, 11 Jul 2019 07:00:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqyYGl7UEME7iSR0ZEiv3KrxBIROxo3pXaQRg6FVYOYzeZPEtj4K5oKuvrDJG+CwKWWSk/XH X-Received: by 2002:a17:906:304d:: with SMTP id d13mr3209924ejd.99.1562853617668; Thu, 11 Jul 2019 07:00:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562853617; cv=none; d=google.com; s=arc-20160816; b=bl50RqOlA9Ex4GCaeEBHipwPvFvJTVk2DvWGYmUQXE4sUjlgaEpKp0/9Y4NDCDrANU V+zq0A8HaEybgoNkcoXja/jjGKGfIhj8h2MtUs1qIQ8/xCTDfzLeaytAhuNrpKgeVkFh RYe/DbUjEqcN4V0EvXL/iDsYztsHGYEUtu2l6rqmzW7rD2pUszJ2W261RKF0EvpHAORJ ZjX+BEj/gauCy3Sp2eJ/hgSBCL7v/HEZbFGYBDuqXumYiyx/gYfmno7gOOz2n8lU3qQU L0Q3L54Cllh7xkx2Y+ejjmBz2I+bYirEgI3VNC7GkAvej7zBYAOqol78fXKYIV0lYusr y7cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=1pb0fF7x3AUZ7sT3Hdxp01Lg2ofbqblakH9rhiFJp7c=; b=MyI8Zqj19mw86THMQlq5bgRjxeYrZnTATpCBUYEOi6CeNTOD7MYBIX82bIAGUdKa+U KNuFCuyMvN8z1Oc3cbVicbWO8rr/SQw1+CCrW10JiMYIFRXJ+XQkXr4s4QcuYL3mA9FX rmjWHjnOd224hTcugEVzBWK0pfDi0zXNDn1f6bQQE4dnySfEC1CbCGbVUgiljJfFSfnz OVJsjNLWZlEzioF2S783TYW8oZU3I+pVstl3zrbuIIHX64NZ6oGein8kNN4mjUdZ6527 UtfGO+Y/wll/jI2WQ9PhHcN4wICCtrKp3W3GjnCDjb+Kq92OH8cv9v7SYYXEDav5F0NM P4wg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz Received: from mx1.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id e27si3607877edd.353.2019.07.11.07.00.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jul 2019 07:00:17 -0700 (PDT) Received-SPF: pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) client-ip=195.135.220.15; Authentication-Results: mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id F330AAF1B; Thu, 11 Jul 2019 14:00:16 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 291371E43CC; Thu, 11 Jul 2019 16:00:16 +0200 (CEST) From: Jan Kara To: Cc: , , Amir Goldstein , Boaz Harrosh , Jan Kara , stable@vger.kernel.org Subject: [PATCH 2/3] fs: Export generic_fadvise() Date: Thu, 11 Jul 2019 16:00:11 +0200 Message-Id: <20190711140012.1671-3-jack@suse.cz> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20190711140012.1671-1-jack@suse.cz> References: <20190711140012.1671-1-jack@suse.cz> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Filesystems will need to call this function from their fadvise handlers. CC: stable@vger.kernel.org # Needed by "xfs: Fix stale data exposure when readahead races with hole punch" Signed-off-by: Jan Kara Reviewed-by: Darrick J. Wong --- include/linux/fs.h | 2 ++ mm/fadvise.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/fs.h b/include/linux/fs.h index f7fdfe93e25d..2666862ff00d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3536,6 +3536,8 @@ extern void inode_nohighmem(struct inode *inode); /* mm/fadvise.c */ extern int vfs_fadvise(struct file *file, loff_t offset, loff_t len, int advice); +extern int generic_fadvise(struct file *file, loff_t offset, loff_t len, + int advice); #if defined(CONFIG_IO_URING) extern struct sock *io_uring_get_socket(struct file *file); diff --git a/mm/fadvise.c b/mm/fadvise.c index 467bcd032037..4f17c83db575 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c @@ -27,8 +27,7 @@ * deactivate the pages and clear PG_Referenced. */ -static int generic_fadvise(struct file *file, loff_t offset, loff_t len, - int advice) +int generic_fadvise(struct file *file, loff_t offset, loff_t len, int advice) { struct inode *inode; struct address_space *mapping; @@ -178,6 +177,7 @@ static int generic_fadvise(struct file *file, loff_t offset, loff_t len, } return 0; } +EXPORT_SYMBOL(generic_fadvise); int vfs_fadvise(struct file *file, loff_t offset, loff_t len, int advice) { From patchwork Thu Jul 11 14:00:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 11040035 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CEF0D14DB for ; Thu, 11 Jul 2019 14:00:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C06A3285C6 for ; Thu, 11 Jul 2019 14:00:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B42BA28846; Thu, 11 Jul 2019 14:00:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F4147285C6 for ; Thu, 11 Jul 2019 14:00:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 861D48E00C0; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 7C07A8E0032; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 63A2C8E00BF; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by kanga.kvack.org (Postfix) with ESMTP id 14DC18E0032 for ; Thu, 11 Jul 2019 10:00:19 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id r21so4750908edc.6 for ; Thu, 11 Jul 2019 07:00:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=NajLKKyXyleKQwtS3hq9FmbF1SSJAJnGnJ4XCzpHh5c=; b=gcJC+WilTfTjJzMzpsuDL7dSvZYnlPQ8ltG5EqxxIE0E/ftbfWm98XeOHDC7qXCkdw kaIVdm1XRpDeLs0mSNGIyFOrXH6Oo8x5x1xfZ2VR50Ot9HaysWp3HNY+cJXCKZgulUBx hin9dEBPs4NwIWO11Cl0QsnNEOTjazYe4zG1sT8fyvxAbXyTnyam9Mjt9NYpehoSPm87 khbc6cq7yKnbt1KDCKnv3CtPwhmPzcvw0X+uSwT/DNnkcJZT5+jSWOh/lASCvOcFOANy w+mLDPPnmo4wiMxObTTzZE1QAbNRI+5VaGyRGIkb6va0d7UecMuBd3t3WDQvkGDDol3F TrvQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz X-Gm-Message-State: APjAAAXxybuyHDk3C4aSDqfa1GwVMnsodaY4lNPn0FFQsBTbfafX7wgg AO3T9R2uH1of38++asBEwL1HeC8IASh684SP+IvOrmxBVezTE3cSgcOqp5QcOLcPfqEjFUhFUEb Rx3sBEBglUFJMYsKhRcVjE93LEnFd3GP5QtYB5pVPzMenBZJWfSTNjS5JagBIgjCVrA== X-Received: by 2002:aa7:c393:: with SMTP id k19mr3698897edq.76.1562853618641; Thu, 11 Jul 2019 07:00:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqxnBFAkWUIdxIwpjPDbazNnZVB2Hig0nbqo4rq5t7+plKEmNKg5livLJVYawPIMYvPKUazd X-Received: by 2002:aa7:c393:: with SMTP id k19mr3698774edq.76.1562853617675; Thu, 11 Jul 2019 07:00:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562853617; cv=none; d=google.com; s=arc-20160816; b=QGt/tmLOPBo7ntV3qrFFyFsSkVkKBG8f2ulpgd/6I1EIRJiRGQKG+lqzSLR/lz8yXv NDuX4+bp0naoCHcxXj7mu9yF+f/9fHPlTnTZdLVD8ovYLvC9mIHS3XZ4dPV5tImqx89w yaaOq8VWbWPZ/uclFJhxKNrH7YP0N5xfp5VF8ohVUD2jLkRG6Pr3ZMq+fTQoO1DF0WKR m2FsBs2PlATFtCYBGkyP0FZSypM2N66zydAcSiU9gXo9iCLEGrhWvDj5t67+G15IBZI+ Mkm9OFja3+idEy1yKVAiH7bXM1cbNY4LbsQZlDcj5fCo4so+V7wCnweJOhFim35r+WjH Ep1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=NajLKKyXyleKQwtS3hq9FmbF1SSJAJnGnJ4XCzpHh5c=; b=rAFVMwBFB+RJfYT5sxa19qRMcaYyawWlqcaNqhoMyonMsQiRKXFgfdy+bMdH3JgDuv YPNE1LZSyVcq8eluTp3LGO23AFQU4T9z5LDcfHidhVy3iWw4x9LBPV8iQ+zp1dfMP53i lbA/fCykS8T+V4f/znMyLLLeIBImVlkhSSb3iftUPJRw5La1NALr3SjucXZrm3eWswWV eudj08penpx4RSmSBlnae5vvgXJO5LmiIbiVvCWSQzP++XJ4fZpl7B96UuuV/ndriYlB NXmrZD5AXzGa4k0MbWYTIukoeR4h6yKqM6AU7OfOmdje0D0yP9TbjxdwGsxrcHbHVYH0 0q4Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz Received: from mx1.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id x16si3490826edb.209.2019.07.11.07.00.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jul 2019 07:00:17 -0700 (PDT) Received-SPF: pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) client-ip=195.135.220.15; Authentication-Results: mx.google.com; spf=pass (google.com: domain of jack@suse.cz designates 195.135.220.15 as permitted sender) smtp.mailfrom=jack@suse.cz X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id F3AB4AF57; Thu, 11 Jul 2019 14:00:16 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 2E77A1E43CE; Thu, 11 Jul 2019 16:00:16 +0200 (CEST) From: Jan Kara To: Cc: , , Amir Goldstein , Boaz Harrosh , Jan Kara , stable@vger.kernel.org Subject: [PATCH 3/3] xfs: Fix stale data exposure when readahead races with hole punch Date: Thu, 11 Jul 2019 16:00:12 +0200 Message-Id: <20190711140012.1671-4-jack@suse.cz> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20190711140012.1671-1-jack@suse.cz> References: <20190711140012.1671-1-jack@suse.cz> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Hole puching currently evicts pages from page cache and then goes on to remove blocks from the inode. This happens under both XFS_IOLOCK_EXCL and XFS_MMAPLOCK_EXCL which provides appropriate serialization with racing reads or page faults. However there is currently nothing that prevents readahead triggered by fadvise() or madvise() from racing with the hole punch and instantiating page cache page after hole punching has evicted page cache in xfs_flush_unmap_range() but before it has removed blocks from the inode. This page cache page will be mapping soon to be freed block and that can lead to returning stale data to userspace or even filesystem corruption. Fix the problem by protecting handling of readahead requests by XFS_IOLOCK_SHARED similarly as we protect reads. CC: stable@vger.kernel.org Link: https://lore.kernel.org/linux-fsdevel/CAOQ4uxjQNmxqmtA_VbYW0Su9rKRk2zobJmahcyeaEVOFKVQ5dw@mail.gmail.com/ Reported-by: Amir Goldstein Signed-off-by: Jan Kara --- fs/xfs/xfs_file.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 76748255f843..88fe3dbb3ba2 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -33,6 +33,7 @@ #include #include #include +#include static const struct vm_operations_struct xfs_file_vm_ops; @@ -939,6 +940,24 @@ xfs_file_fallocate( return error; } +STATIC int +xfs_file_fadvise( + struct file *file, + loff_t start, + loff_t end, + int advice) +{ + struct xfs_inode *ip = XFS_I(file_inode(file)); + int ret; + + /* Readahead needs protection from hole punching and similar ops */ + if (advice == POSIX_FADV_WILLNEED) + xfs_ilock(ip, XFS_IOLOCK_SHARED); + ret = generic_fadvise(file, start, end, advice); + if (advice == POSIX_FADV_WILLNEED) + xfs_iunlock(ip, XFS_IOLOCK_SHARED); + return ret; +} STATIC loff_t xfs_file_remap_range( @@ -1235,6 +1254,7 @@ const struct file_operations xfs_file_operations = { .fsync = xfs_file_fsync, .get_unmapped_area = thp_get_unmapped_area, .fallocate = xfs_file_fallocate, + .fadvise = xfs_file_fadvise, .remap_file_range = xfs_file_remap_range, };