From patchwork Sun Aug 26 16:25:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10576293 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 971665A4 for ; Sun, 26 Aug 2018 16:23:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9105C29876 for ; Sun, 26 Aug 2018 16:23:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 84B02298B5; Sun, 26 Aug 2018 16:23:37 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 26FE129876 for ; Sun, 26 Aug 2018 16:23:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726875AbeHZUGd (ORCPT ); Sun, 26 Aug 2018 16:06:33 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:41936 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726694AbeHZUGd (ORCPT ); Sun, 26 Aug 2018 16:06:33 -0400 Received: by mail-wr1-f66.google.com with SMTP id z96-v6so11411439wrb.8; Sun, 26 Aug 2018 09:23:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=P7dugTAK22NtIrKqBTjGfuAX38LHCGnJT/DHz8lsgnM=; b=FRAkSav5gkZ9nJIEE99mHPxwYhvO/v1kRdUDC54nMNipC2tHm5NN2KFawhS71W4kv0 NZv8RIz7Nu4oIP7Zjv5FzDs7ZxtheL3oaHn/2frOotXiP7K/gWGJBUnY9CHoUdrAjEHi LpbGPRMJPXb6+Ny+TXc4tc94xEecORQ7KTKqFf7HtYrJkxvYh81h4bqJ/DiVqVpI/CPS NHzm80iZ7qRvFEp95KTl9WjAFEMes+R5zQRM0Bifk+sDn+HgHzPwxWMxcrl9MGZR3y81 iC3/qIBhGkjaBwYBCis/g5IYR32KwpvcNV/29EQyRLvfl6dkvPcjwbq0cxP/RUgWpOLp oZ+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=P7dugTAK22NtIrKqBTjGfuAX38LHCGnJT/DHz8lsgnM=; b=XG1g1LbhgU7HvSTyyWi2nLSa7WVIlvEgSf9K6MNtGf0aPDgyctOolpHbKzuf+7ptCK M5y6fmQtz1pghmSVQFs/erU9qygD65QiZQdd6BvgcCWXe6ffF+O+D4zkSvxkvNgsWLVw p7cPggNFLKpUoh6UFF6DO7dGTRWUzSD3p8+7QH8L5UzU9RQnOudXjW82ajGwRHwhf8dM r1/WMy2S7sS37AitB62egEFI0MglAgADsG7hdZ9XcE4dtjIhOLivygJxjP7BIA1gtONd N/EQxD9s1EDytYqe4e3Ks0ZAjp5R2md2xzEzCsYxJZhb4W4EUr+3L84eRNLCqB9WnH6T eKVg== X-Gm-Message-State: APzg51DmaXwETaEI/7wPJlmbn6sJTS6vWhuXVVefJj11fAm6oIIB3Tat PSG9r7V22eOwgbwZWuiCfkw= X-Google-Smtp-Source: ANB0VdZJ5970Eh5ObWcapT8ndCh8npH42gxhSzjtM/CXYyydBiAEBDu3CvKhdWDubJ3k6yfYHi+/+A== X-Received: by 2002:adf:c5c5:: with SMTP id v5-v6mr6238144wrg.30.1535300612297; Sun, 26 Aug 2018 09:23:32 -0700 (PDT) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id o33-v6sm27559238wrf.11.2018.08.26.09.23.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 26 Aug 2018 09:23:31 -0700 (PDT) From: Amir Goldstein To: Miklos Szeredi Cc: Al Viro , Dave Chinner , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v2 1/6] vfs: add helper to get "real" overlayfs file Date: Sun, 26 Aug 2018 19:25:12 +0300 Message-Id: <1535300717-26686-2-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535300717-26686-1-git-send-email-amir73il@gmail.com> References: <1535300717-26686-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We recently got rid of most VFS "hacks" that made VFS be aware of overlayfs real underlying dentries. Due to collateral damage of removing these hacks, we now need to make VFS be aware of overlayfs real underlying files. Hopefully, the end result will be fewer places where VFS is aware of overlayfs quirks. Signed-off-by: Amir Goldstein --- fs/overlayfs/file.c | 1 + include/linux/fs.h | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index 32e9282893c9..24c9e0d70c3b 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -135,6 +135,7 @@ static int ovl_open(struct inode *inode, struct file *file) file->f_mapping = realfile->f_mapping; file->private_data = realfile; + file->f_mode |= FMODE_STACKED; return 0; } diff --git a/include/linux/fs.h b/include/linux/fs.h index 33322702c910..51c5d167498f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -161,6 +161,12 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset, /* File does not contribute to nr_files count */ #define FMODE_NOACCOUNT ((__force fmode_t)0x20000000) +/* + * File is stacked over a "real" file that is used for the actual io + * operations. This is set by overlayfs and tested by file_real() in VFS code. + * Not every "stacked" filesystem needs to set this flag. + */ +#define FMODE_STACKED ((__force fmode_t)0x40000000) /* * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector @@ -2450,6 +2456,27 @@ static inline struct file *file_clone_open(struct file *file) } extern int filp_close(struct file *, fl_owner_t id); +/** + * file_real - Return the real file of a stacked file + * @file: The file to query + * + * If @file is on a union/overlay, then return the underlying, real file. + * Otherwise return @file. + */ +static inline struct file *file_real(struct file *file) +{ + /* + * XXX: Instead of pretending we have a variaty of stacked filesystems + * and implement a f_op->real() operation, just open code the simple + * overlayfs implementation and if we ever need something more fancy, + * we can add the f_op->real() then. + */ + if (unlikely(file->f_mode & FMODE_STACKED)) + return (struct file *)file->private_data; + else + return file; +} + extern struct filename *getname_flags(const char __user *, int, int *); extern struct filename *getname(const char __user *); extern struct filename *getname_kernel(const char *); From patchwork Sun Aug 26 16:25:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10576295 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 B18EF1805 for ; Sun, 26 Aug 2018 16:23:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AD97729571 for ; Sun, 26 Aug 2018 16:23:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A04A8298B3; Sun, 26 Aug 2018 16:23:37 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 47C48298B3 for ; Sun, 26 Aug 2018 16:23:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726895AbeHZUGf (ORCPT ); Sun, 26 Aug 2018 16:06:35 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:33953 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726872AbeHZUGe (ORCPT ); Sun, 26 Aug 2018 16:06:34 -0400 Received: by mail-wr1-f68.google.com with SMTP id g33-v6so11421739wrd.1; Sun, 26 Aug 2018 09:23:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Z8UVetByIKcQIl6vyypHPQbvphTK18rJPPyUIR7dOF4=; b=tcTxTrOeNSm1QHJbOx2+fGKAyuT0lXFnAKDMZY5RV0k3ZzixUlN0MpDg7uQFOPCg67 LwVUZ/n46227ie++eOJGhXCNL40sCPASyRxAmymqt3GjIMcfnzsuuiPq1xy+2RD0i0Bn 6XC7ONK7m9a7tZ9yZjKrlipHHz3cHfwEUFCqyJiZChSgNqUSND3CGNYYYzSzld4ulOWq 6//Lq2Q/fhUok5r/12yO77GFP31Df336n5JhAP0oKPP3X3mWOaz4ZBZJnjtFmDpo3J0H Vr1UHGOvQ1SdG8vx1Mu1UJA8wTlbP9y9iGq3qm/jp7In2imt4gBPueL+JmBHhispdCVw 2Q2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Z8UVetByIKcQIl6vyypHPQbvphTK18rJPPyUIR7dOF4=; b=PbaHVH+5V9y0vySA+sPJ8IE84ap1/hdUCZys2xE5Qs4/+58Vag6O+F/FWdHRcMWfx+ Kke8E+EEzGNuAJp+1IlCUhDtb7b7GaLctA0rrrK9OjKnR369iFKa8yI6rggT7uHYBW+6 jgS/aMAxN7uSUnJAB+Z3CUbLDSazotpcZzYWVK7yvtM3K9IJTo5mOCBXNKmAgzZ2ELRi uK0tTgmIPrZ3Syn78Ud2//Wemq3fxPf4WD6Qu4OVCl6PVn4adsTH7J6u4mI8X29Q4tw+ S+ojiHIS8T0TAH27c0cpWXlchsX7NmqRRHaA9se2R0QDKPCZsdduZZ6vm/3ePua8MvOW MCsQ== X-Gm-Message-State: APzg51AAQDySyKcFb+ww1b4Qm7mhMdZpX9EYuJA3UnvPL6GHlGbO1Ljd gmv3pISt2XXG1C6Q6nyYO6c= X-Google-Smtp-Source: ANB0VdZmrjslr/2kh/W9eb3QER/1jiDGXGvX0USZyr63T09vkTkaxR19Xlg1vupco1JAzMv87o3tLw== X-Received: by 2002:adf:f749:: with SMTP id z9-v6mr6296807wrp.85.1535300613458; Sun, 26 Aug 2018 09:23:33 -0700 (PDT) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id o33-v6sm27559238wrf.11.2018.08.26.09.23.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 26 Aug 2018 09:23:33 -0700 (PDT) From: Amir Goldstein To: Miklos Szeredi Cc: Al Viro , Dave Chinner , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v2 2/6] ovl: respect FIEMAP_FLAG_SYNC flag Date: Sun, 26 Aug 2018 19:25:13 +0300 Message-Id: <1535300717-26686-3-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535300717-26686-1-git-send-email-amir73il@gmail.com> References: <1535300717-26686-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Stacked overlayfs fiemap operation broke xfstests that test delayed allocation (with "_test_generic_punch -d"), because ovl_fiemap() failed to write dirty pages when requested. Fixes: 9e142c4102db ("ovl: add ovl_fiemap()") Signed-off-by: Amir Goldstein --- fs/overlayfs/inode.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index e0bb217c01e2..5014749fd4b4 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -467,6 +467,10 @@ static int ovl_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, return -EOPNOTSUPP; old_cred = ovl_override_creds(inode->i_sb); + + if (fieinfo->fi_flags & FIEMAP_FLAG_SYNC) + filemap_write_and_wait(realinode->i_mapping); + err = realinode->i_op->fiemap(realinode, fieinfo, start, len); revert_creds(old_cred); From patchwork Sun Aug 26 16:25:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10576297 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 E25A55A4 for ; Sun, 26 Aug 2018 16:23:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E020129571 for ; Sun, 26 Aug 2018 16:23:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D4397298B3; Sun, 26 Aug 2018 16:23:38 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6C92329571 for ; Sun, 26 Aug 2018 16:23:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726902AbeHZUGh (ORCPT ); Sun, 26 Aug 2018 16:06:37 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:39725 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726611AbeHZUGg (ORCPT ); Sun, 26 Aug 2018 16:06:36 -0400 Received: by mail-wm0-f66.google.com with SMTP id q8-v6so6068371wmq.4; Sun, 26 Aug 2018 09:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AWGhUj59TV0oflRlqxAcSZmSbdAhKbqLDmslF7GgpbU=; b=qcOry0/yZeW39FvdUKFi5UUJ2W/g+w1Nfqo5grtVN3tF3zt3i03kWjg8zmMBWfIbES zN73KD7Z3xcvZLk6uYJIyRhZUjJ+FvIAZBqx87uzGcOG7WMkLubMzWcMBkU0Nri/kXvS xgVZ7yc/LMmkGw3+DBJzfnt79DD/1dPDBk7363Vf+nbivZTW+IYZ4htaq5RzlHEAwt2F b2ChjCVxUbPC08OtR12RfSJFk37UEe8TQs3FipPxBY7TDOoKrP4W/q+iivokn9ed4IEK 9iHUhLiYJMQAtbAb+yfLXl+EALgWNSJ5M4japeAuGvvoNFzi4SIZFIE/4RVuCNYgllYN P6OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AWGhUj59TV0oflRlqxAcSZmSbdAhKbqLDmslF7GgpbU=; b=Icu+ezd+OndQSJAUHAJ1i6tppe1ikmV+u+z/k3mP7iXoIFlBqqHECc+aKxstZm2g8m 1+k39cZ/v9E6Y+ObiApEJPuUObHwW91FbKAZTbz2oe8m5YDS6GQX2qFO62XFcsisbIGO lIiYKKVd6bnco8d66bp3Pm4IFgSUFSL3ATwMv7FYlm0O7QSnxA0Uef6HhSgWSSUDMi46 9t1um+99F3lBQnFQtqj5RY5wZ0eJe43Bx55HjEHwgKvmiZFGKA0wQVb/76MqlxB/Fcsu /b2RuS1O0IXhxV8kIxjg3wB1aAAOceofitnRGOkCgqUPHXFd4WpIENME6pturI293fkT Vlcg== X-Gm-Message-State: APzg51CUhUx+QLi8XYA0t6xPjR1s2RMlDFuoEckb8oCGY9noVY/L8ph2 Zm9rJD89LNLuiARYnGS19W4= X-Google-Smtp-Source: ANB0VdY+OAnTbWQ77QapcDErJtp2AS1i0K9HxlybcgMMEZCXDsduJBAzVH3BcXVmGXrtTXfTnGMO1g== X-Received: by 2002:a1c:ca17:: with SMTP id a23-v6mr3346048wmg.122.1535300614738; Sun, 26 Aug 2018 09:23:34 -0700 (PDT) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id o33-v6sm27559238wrf.11.2018.08.26.09.23.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 26 Aug 2018 09:23:34 -0700 (PDT) From: Amir Goldstein To: Miklos Szeredi Cc: Al Viro , Dave Chinner , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v2 3/6] ovl: fix GPF in swapfile_activate of file from overlayfs over xfs Date: Sun, 26 Aug 2018 19:25:14 +0300 Message-Id: <1535300717-26686-4-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535300717-26686-1-git-send-email-amir73il@gmail.com> References: <1535300717-26686-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Since overlayfs implements stacked file operations, the underlying filesystems are not supposed to be exposed to the overlayfs file, whose f_inode is an overlayfs inode. Assigning an overlayfs file to swap_file results in an attempt of xfs code to dereference an xfs_inode struct from an ovl_inode pointer: CPU: 0 PID: 2462 Comm: swapon Not tainted 4.18.0-xfstests-12721-g33e17876ea4e #3402 RIP: 0010:xfs_find_bdev_for_inode+0x23/0x2f Call Trace: xfs_iomap_swapfile_activate+0x1f/0x43 __se_sys_swapon+0xb1a/0xee9 Fix this by not assigning the real inode mapping to f_mapping, which will cause swapon() to return an error (-EINVAL). Although it makes sense not to allow setting swpafile on an overlayfs file, some users may depend on it, so we may need to fix this up in the future. Keeping f_mapping pointing to overlay inode mapping will cause O_DIRECT open to fail. Fix this by installing ovl_aops with noop_direct_IO in overlay inode mapping. Keeping f_mapping pointing to overlay inode mapping will cause other a_ops related operations to fail (e.g. readahead()). Those will be fixed by follow up patches. Suggested-by: Miklos Szeredi Fixes: f7c72396d0de ("ovl: add O_DIRECT support") Signed-off-by: Amir Goldstein --- fs/overlayfs/file.c | 3 --- fs/overlayfs/inode.c | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index 24c9e0d70c3b..fd64daf6daa5 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -131,9 +131,6 @@ static int ovl_open(struct inode *inode, struct file *file) if (IS_ERR(realfile)) return PTR_ERR(realfile); - /* For O_DIRECT dentry_open() checks f_mapping->a_ops->direct_IO */ - file->f_mapping = realfile->f_mapping; - file->private_data = realfile; file->f_mode |= FMODE_STACKED; diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 5014749fd4b4..b6ac545b5a32 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -504,6 +504,11 @@ static const struct inode_operations ovl_special_inode_operations = { .update_time = ovl_update_time, }; +const struct address_space_operations ovl_aops = { + /* For O_DIRECT dentry_open() checks f_mapping->a_ops->direct_IO */ + .direct_IO = noop_direct_IO, +}; + /* * It is possible to stack overlayfs instance on top of another * overlayfs instance as lower layer. We need to annonate the @@ -575,6 +580,7 @@ static void ovl_fill_inode(struct inode *inode, umode_t mode, dev_t rdev, case S_IFREG: inode->i_op = &ovl_file_inode_operations; inode->i_fop = &ovl_file_operations; + inode->i_mapping->a_ops = &ovl_aops; break; case S_IFDIR: From patchwork Sun Aug 26 16:25:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10576299 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 D16655A4 for ; Sun, 26 Aug 2018 16:23:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF06E29571 for ; Sun, 26 Aug 2018 16:23:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C2E2B298B3; Sun, 26 Aug 2018 16:23:39 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 65AC129571 for ; Sun, 26 Aug 2018 16:23:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726911AbeHZUGi (ORCPT ); Sun, 26 Aug 2018 16:06:38 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:46612 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726872AbeHZUGh (ORCPT ); Sun, 26 Aug 2018 16:06:37 -0400 Received: by mail-wr1-f67.google.com with SMTP id a108-v6so11394205wrc.13; Sun, 26 Aug 2018 09:23:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kzG5VIrl9qK57JdHblLS3rE7MDozHF5bYYJgbja+ZuM=; b=A6IVcBn9l2Ho+SStDK1ow8+BFYPuWsF3B2ok79JngWx7+tdfH5/gD5744sS1cDAU6w HRIIZbkWd/uN6OfOT85gsRAmTDFCqYBoVDTqiXNZW1z2KpJgXypFSX1ps81CbdcbFfMW I1shu+lLtWSGU/WFr1U6N8Ku8lrWlX1S3MmfzxcJd+spVld6OOs3KOuFizwbqB2BnPjQ sd48LYxMykUQ+yhzwSRPz1Ww7/KN5YUtHJb8XCFO18JSz1xvRYKKwxLj5djLZBIPVaJR ms3/LBbvnGbCv4sJFqiQc4LsCFHR4jOFG4GtzBOZRMcbUlnx61KxCCKr/90ZbJteO+xJ sORg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kzG5VIrl9qK57JdHblLS3rE7MDozHF5bYYJgbja+ZuM=; b=c+DcAalDVMwyIWjNCBapS/p4yhpRpMEVFxIYQukySn7+JFOTuD749j3rIEbueVQe6T 5z7WGcDModW2m5fHIr5tMRdjehLi26s/+DMb7bgCOeeBoik5DAfQj30x6IcL3+UEO1EL hyfeQsbBS5YBqASNDQokJP9LeSSq08wB6z7dLE4f6PtsNe65tlmkijFcXuQR84MrZvT3 lwpgchsz9LhD+oaVP668mKXwANOcuq0VhtfEFYhoPnTqgr1khJ7p4iMAHhwBR+IzMvLl gbuTgCqP/U2KQWYcV+t6RQvmN7pi7ImHi24zvWeXOzOq8iA8jY9j7HZENljd4fU8ScMr 5+zg== X-Gm-Message-State: APzg51DgHfSdk9+2oXiJQgQPVTYDKkAXpoHk9wvixrHt2RQeZE5J0xJ9 SHsjaEi4YSbfI+z1p5OQ4Dw= X-Google-Smtp-Source: ANB0VdZ2aJ1GyqxQhkrCWjA8aJn+xc1/praEpe+JLHp+mvt0P2mIYbSl5cmieUKKTXJsOh1SBO66fw== X-Received: by 2002:adf:c454:: with SMTP id a20-v6mr6122459wrg.20.1535300616159; Sun, 26 Aug 2018 09:23:36 -0700 (PDT) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id o33-v6sm27559238wrf.11.2018.08.26.09.23.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 26 Aug 2018 09:23:35 -0700 (PDT) From: Amir Goldstein To: Miklos Szeredi Cc: Al Viro , Dave Chinner , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v2 4/6] vfs: fix readahead syscall on an overlayfs file Date: Sun, 26 Aug 2018 19:25:15 +0300 Message-Id: <1535300717-26686-5-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535300717-26686-1-git-send-email-amir73il@gmail.com> References: <1535300717-26686-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Overlayfs implements stacked file operations, but does not implement stacked a_ops, so passing an overlayfs file to do_readahead() results in an error. Fix this by passing the real underlying file to do_readahead(). Fixes: d1d04ef8572b ("ovl: stack file ops") Signed-off-by: Amir Goldstein --- mm/readahead.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mm/readahead.c b/mm/readahead.c index a59ea70527b9..dc9c64ce6094 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -602,11 +602,16 @@ ssize_t ksys_readahead(int fd, loff_t offset, size_t count) f = fdget(fd); if (f.file) { if (f.file->f_mode & FMODE_READ) { - struct address_space *mapping = f.file->f_mapping; + /* + * XXX: We need to use file_real(), because overlayfs + * stacked file/inode do not implement page io. + */ + struct file *file = file_real(f.file); + struct address_space *mapping = file->f_mapping; pgoff_t start = offset >> PAGE_SHIFT; pgoff_t end = (offset + count - 1) >> PAGE_SHIFT; unsigned long len = end - start + 1; - ret = do_readahead(mapping, f.file, start, len); + ret = do_readahead(mapping, file, start, len); } fdput(f); } From patchwork Sun Aug 26 16:25:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10576301 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 A32295A4 for ; Sun, 26 Aug 2018 16:23:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A0E7129571 for ; Sun, 26 Aug 2018 16:23:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 95760298B3; Sun, 26 Aug 2018 16:23:40 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3870429571 for ; Sun, 26 Aug 2018 16:23:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726920AbeHZUGi (ORCPT ); Sun, 26 Aug 2018 16:06:38 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:42614 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726611AbeHZUGi (ORCPT ); Sun, 26 Aug 2018 16:06:38 -0400 Received: by mail-wr1-f67.google.com with SMTP id v17-v6so11403497wrr.9; Sun, 26 Aug 2018 09:23:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mC8k9PndJ9Y8/DP8pJKF/M6bORTuNZDwQ+wm6Xey3MY=; b=WPfW5OXZAZUm4k/KIaED5uEWUvKwZ8sTA37JXwtzTf4HT4hpnYJ5Jt65dx1EzWp3Ie DNwRPr5BuR7GIqcl0k9IE+j51Zt55mtVeb5xndSzl2ZOytQrvBtl7NqGUpjQiig/0IYC caTk8TjTH6mZdoVJVBhmhuRbxHVspuNIV58kyicgT1uJv8Q/ywvJkCyaMiAA4xwrnhxn eYmp9BoGepj5YrTCJpQVkdq29hIfZsZ9OsMvY1GQCmob1VbWWwHkMHtDsysNJkLFWh06 7UooUK24Ibt8iyu/AcixiUlkiCBCw/pXSfG2WyH19NoTmRnKZUc/fmr1SZEbHqbXWS/m t2YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mC8k9PndJ9Y8/DP8pJKF/M6bORTuNZDwQ+wm6Xey3MY=; b=Fn8/HOJwTZ1mca2/fwxTWka5GLzZRJrcOEk/vLIWGUjee9/55lXVjFDO9/ObGP5NtH xLB/TNT1d+KvCJtVJZoLUsEbhG0YFy9KX6PbLPMxDR2E/NbZB7+Ij80x8YIewwLnN8Kp LwcwL6LR7EHocUDa0j9F20flTzzilhj2OqQbfLGjmw/mM7vy9G2yMkbMgF3/ymYvbCDT fKWFJWKNua28Ts8SHi8SZy5Y795ypISBZwMU35Ogx1gbJzlp+Z5lZJAS4OFW+SnKrVL9 8SMk3AVmSFK8QNdIWU3U9HXvI4ViKjECbZWs7l7jShnmIYS3KazY1caq0UGM3przxKuv 4gcA== X-Gm-Message-State: APzg51BrwFyPMeqtRLXRB2olAfb+jpIowbGOo/kjby1yJQ56iRWgpl9p 1/gcQAYjUWP/yneJXY/j2MYx8DYS X-Google-Smtp-Source: ANB0Vdb0kAQe7ob5hynyOQlZzYq7fjP3ikPmBS3MYzFhJGLIppw+iSF9QjIl5QYtYhEjT+gbVQ3kPA== X-Received: by 2002:adf:f0c8:: with SMTP id x8-v6mr6773476wro.49.1535300617344; Sun, 26 Aug 2018 09:23:37 -0700 (PDT) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id o33-v6sm27559238wrf.11.2018.08.26.09.23.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 26 Aug 2018 09:23:36 -0700 (PDT) From: Amir Goldstein To: Miklos Szeredi Cc: Al Viro , Dave Chinner , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v2 5/6] vfs: fix fadvise64 syscall on an overlayfs file Date: Sun, 26 Aug 2018 19:25:16 +0300 Message-Id: <1535300717-26686-6-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535300717-26686-1-git-send-email-amir73il@gmail.com> References: <1535300717-26686-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP For an overlayfs file/inode, gage io is operating on the real underlying file, so the readahead hints set by fadvise64() should also be set on the real underlying file to take affect. Fixes: d1d04ef8572b ("ovl: stack file ops") Signed-off-by: Amir Goldstein --- mm/fadvise.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/mm/fadvise.c b/mm/fadvise.c index 2d8376e3c640..d5528343ce77 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c @@ -30,6 +30,7 @@ int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) { struct fd f = fdget(fd); + struct file *file; struct inode *inode; struct address_space *mapping; struct backing_dev_info *bdi; @@ -42,13 +43,18 @@ int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) if (!f.file) return -EBADF; - inode = file_inode(f.file); + /* + * XXX: We need to use file_real() for overlayfs stacked file because + * readahead will be operating on the real underlying file/inode. + */ + file = file_real(f.file); + inode = file_inode(file); if (S_ISFIFO(inode->i_mode)) { ret = -ESPIPE; goto out; } - mapping = f.file->f_mapping; + mapping = file->f_mapping; if (!mapping || len < 0) { ret = -EINVAL; goto out; @@ -85,21 +91,21 @@ int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) switch (advice) { case POSIX_FADV_NORMAL: - f.file->f_ra.ra_pages = bdi->ra_pages; - spin_lock(&f.file->f_lock); - f.file->f_mode &= ~FMODE_RANDOM; - spin_unlock(&f.file->f_lock); + file->f_ra.ra_pages = bdi->ra_pages; + spin_lock(&file->f_lock); + file->f_mode &= ~FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_RANDOM: - spin_lock(&f.file->f_lock); - f.file->f_mode |= FMODE_RANDOM; - spin_unlock(&f.file->f_lock); + spin_lock(&file->f_lock); + file->f_mode |= FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_SEQUENTIAL: - f.file->f_ra.ra_pages = bdi->ra_pages * 2; - spin_lock(&f.file->f_lock); - f.file->f_mode &= ~FMODE_RANDOM; - spin_unlock(&f.file->f_lock); + file->f_ra.ra_pages = bdi->ra_pages * 2; + spin_lock(&file->f_lock); + file->f_mode &= ~FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_WILLNEED: /* First and last PARTIAL page! */ @@ -115,7 +121,7 @@ int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) * Ignore return value because fadvise() shall return * success even if filesystem can't retrieve a hint, */ - force_page_cache_readahead(mapping, f.file, start_index, + force_page_cache_readahead(mapping, file, start_index, nrpages); break; case POSIX_FADV_NOREUSE: From patchwork Sun Aug 26 16:25:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10576303 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 335DF15A7 for ; Sun, 26 Aug 2018 16:23:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3018C29571 for ; Sun, 26 Aug 2018 16:23:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 246D7298B3; Sun, 26 Aug 2018 16:23:42 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C885D29571 for ; Sun, 26 Aug 2018 16:23:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726930AbeHZUGk (ORCPT ); Sun, 26 Aug 2018 16:06:40 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:50462 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726872AbeHZUGk (ORCPT ); Sun, 26 Aug 2018 16:06:40 -0400 Received: by mail-wm0-f65.google.com with SMTP id s12-v6so5890101wmc.0; Sun, 26 Aug 2018 09:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Ip5waqA6aw/8c/zf472FD2ASqTVdXpkZnp0uHu/P5hI=; b=qCt8gQDqQ4+AzITC6hLN8C+1Eb8wmRxJBS/4/50MeahNm9v4P7msKZjRkyRhoUIGDg lUl8L/6y0XkSi7JRspcwLBTtBZrTCx2FVorheh3MPXylLwm6ZI/DurWNuM7R4iqn/cTW d+jN58tW1ZLiOKCejXvLObTElNWgkPzUVK1SqRGSBhrMQcUz9f2XUM2TwikvFuqT0Qki bKm7uBHvCSjqEiKdnXboAlOnqATNbSm7Ti/G4reUrAbltfZsnqI3T+fCe0fA94o+LRaP jbR7ornExRriZvcx1Xdgt7b55V8GjC8cAdJjESSi1hX3gd1IJCbeCu0ksLw4boHQ0imw 9Gaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Ip5waqA6aw/8c/zf472FD2ASqTVdXpkZnp0uHu/P5hI=; b=aXBgiSdZfeAkajWkwMTt4/RYd/3vl/XqqPJufKvvN2jWNgZYu2Y/GTpAhndSsz6Q9H DWdA1ui54ow71YxeEkQ5dIKJBjZHfQWiuulTJd4yv+ETvnaLfU/8yPyrauzlIX/NbUDb xczKSQAGjxwrXRxPheEtFJ+gJP7R/98ksaqDWJX/kxVeMAE56EFYAqiHGfMqR4Tm87qU ca+4lM1WFYYJKrg0gVrL7PfUMBKOStqub9v5AB/gOrsKr4FPFNsTT7dwGkFQOFIydSLO DD5GuKBUdNshAezjUPN1UTN4hXNcwgCcH2C+JUmvcaO96HgGpTarmHZpBApdbASFSXqW 8iUw== X-Gm-Message-State: APzg51CTZjCAAPvSoPISVsbApMpQR3wWLMBbaXBlTjNcUcQqizLvXHW3 YShXDPk40veECkbRMwEfw0I= X-Google-Smtp-Source: ANB0VdY4geV4GEu7d78yi7lPAT3s4ClUSDE+EaTqxjWTQfn+2wGyvK7LsEum1fC9FaQHz94Va4uM2Q== X-Received: by 2002:a1c:752:: with SMTP id 79-v6mr3786200wmh.59.1535300618599; Sun, 26 Aug 2018 09:23:38 -0700 (PDT) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id o33-v6sm27559238wrf.11.2018.08.26.09.23.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 26 Aug 2018 09:23:38 -0700 (PDT) From: Amir Goldstein To: Miklos Szeredi Cc: Al Viro , Dave Chinner , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v2 6/6] vfs: fix sync_file_range syscall on an overlayfs file Date: Sun, 26 Aug 2018 19:25:17 +0300 Message-Id: <1535300717-26686-7-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535300717-26686-1-git-send-email-amir73il@gmail.com> References: <1535300717-26686-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP For an overlayfs file/inode, page io is operating on the real underlying file, so sync_file_range() should operate on the real underlying file mapping to take affect. Fixes: d1d04ef8572b ("ovl: stack file ops") Signed-off-by: Amir Goldstein --- fs/sync.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/fs/sync.c b/fs/sync.c index b54e0541ad89..28a26333844d 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -286,6 +286,7 @@ int ksys_sync_file_range(int fd, loff_t offset, loff_t nbytes, { int ret; struct fd f; + struct file *file; struct address_space *mapping; loff_t endbyte; /* inclusive */ umode_t i_mode; @@ -330,16 +331,21 @@ int ksys_sync_file_range(int fd, loff_t offset, loff_t nbytes, if (!f.file) goto out; - i_mode = file_inode(f.file)->i_mode; + /* + * XXX: We need to use file_real() for overlayfs stacked file because + * page io is operating on the real underlying file/inode. + */ + file = file_real(f.file); + i_mode = file_inode(file)->i_mode; ret = -ESPIPE; if (!S_ISREG(i_mode) && !S_ISBLK(i_mode) && !S_ISDIR(i_mode) && !S_ISLNK(i_mode)) goto out_put; - mapping = f.file->f_mapping; + mapping = file->f_mapping; ret = 0; if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) { - ret = file_fdatawait_range(f.file, offset, endbyte); + ret = file_fdatawait_range(file, offset, endbyte); if (ret < 0) goto out_put; } @@ -352,7 +358,7 @@ int ksys_sync_file_range(int fd, loff_t offset, loff_t nbytes, } if (flags & SYNC_FILE_RANGE_WAIT_AFTER) - ret = file_fdatawait_range(f.file, offset, endbyte); + ret = file_fdatawait_range(file, offset, endbyte); out_put: fdput(f);