From patchwork Fri Nov 13 06:55:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902601 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 32C9F697 for ; Fri, 13 Nov 2020 06:57:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D0A2322201 for ; Fri, 13 Nov 2020 06:57:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="ShkQYaId" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726270AbgKMG5E (ORCPT ); Fri, 13 Nov 2020 01:57:04 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17155 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726188AbgKMG5E (ORCPT ); Fri, 13 Nov 2020 01:57:04 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250605; cv=none; d=zoho.com.cn; s=zohoarc; b=kFmChfc4GlxQHCLnzUNSJyAX51LfY5QmzYpuZU0GKYaOrOOyUk8xBYDKQpclLqlQH4zU5cdBYAQ4Q8N2ld5U6q0nmVKylJC4ufP61M/nRofnAzhdxPsWBRf4bLFC40SBY4ozMuu0t8Y2TAOvL5O8uxlMs3NV4qt0Oa44DqSVsjY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250605; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=NlKEQcKE+RNemWdOzA+NXWjXnwiavlahEmjugedQVBk=; b=eF7MH9is43mBl+YG2q8BRfp14dufGixHbC7hscMEOuQlPRlco9qexO8n3zNHSTOXdyRuADDADMmdxnyDzEG1zs+f6oCas7jOer6dO3SilBmbj6kZHjEwqTqDf5ZbeB0Fh/Y3C5/FmeDsQBetl/Bf9WvZyVjbtwf2BeFB3BQksbY= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250605; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=NlKEQcKE+RNemWdOzA+NXWjXnwiavlahEmjugedQVBk=; b=ShkQYaIdjJp/sCKYNhZ+8u4RHfppwY1wMau6NO5KqQ8wXdlqxLdJAEnOpnJoyAyC jLzpkPTvzYU4NBWUXQAbnyJr3oLs5qW9h1qTfoZxAqE63+Tcth8QM66uN04ybVr/uxZ sgH4pfiXoAI1a0+LFVqJRpcOD6UkwYsFQpy+cYmE= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250603530773.1814704162608; Fri, 13 Nov 2020 14:56:43 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-2-cgxu519@mykernel.net> Subject: [RFC PATCH v4 1/9] ovl: setup overlayfs' private bdi Date: Fri, 13 Nov 2020 14:55:47 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Setup overlayfs' private bdi so that we can collect overlayfs' own dirty inodes. Signed-off-by: Chengguang Xu --- fs/overlayfs/super.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 290983bcfbb3..d1e546abce87 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -1869,6 +1869,10 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) if (!ofs) goto out; + err = super_setup_bdi(sb); + if (err) + goto out_err; + ofs->creator_cred = cred = prepare_creds(); if (!cred) goto out_err; From patchwork Fri Nov 13 06:55:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902605 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A4D8514C0 for ; Fri, 13 Nov 2020 06:57:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8053720B80 for ; Fri, 13 Nov 2020 06:57:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="gCORlk4J" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726295AbgKMG5M (ORCPT ); Fri, 13 Nov 2020 01:57:12 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17110 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726083AbgKMG5M (ORCPT ); Fri, 13 Nov 2020 01:57:12 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250613; cv=none; d=zoho.com.cn; s=zohoarc; b=OJGa2fcfyxjzbu6AIxkD0UAXvQRC6G45+olHvR+tMNLEmSDjd24uyEb8FsWo1vlQ7GAHOsnMRvfLwczMfsCfS86ZNitGu4a/rkRIV1vPiXtrKTWKWp9mncnxaxJuDxPEfOhxAWk6XnU1+QkL8Wml7fn+1e0s6f48i/nNnpBGU88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250613; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=ZdSh8eREzPnVlAiCPIG4ZzRu+AUpP6611hYDLM3CBvA=; b=djoK7g0dGQs8rKmXsm4bxZt3XAWJCJs8dBug6owYooLrhaUFuNbdEtLQyIW0ncKGa+OonTD2rdvJMzab97c7o23JTRxl3LYYY94sbBArvdKxICbln3lNtPnmUvLScD4VJstij3LYLyB669ct/JQCsSutasY9P/JfwuryJwRQI8U= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250613; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=ZdSh8eREzPnVlAiCPIG4ZzRu+AUpP6611hYDLM3CBvA=; b=gCORlk4JijJuB0JBxE24pZGE9itXVfRRXaigLnif8HnXmfeVm8oxuQ+Q1ljBEgxx 1kSUYROLpQddYLV+7Obr80NTeWOhpMpZWp5e6Hr78+4P9fyXItBWsZRIslOEJAwVSKB p7NHr4vkr3Y32tYS5XcHRjGVEGteLlBIvE6gRXKM= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250610633346.4087931492967; Fri, 13 Nov 2020 14:56:50 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-3-cgxu519@mykernel.net> Subject: [RFC PATCH v4 2/9] ovl: implement ->writepages operation Date: Fri, 13 Nov 2020 14:55:48 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Implement overlayfs' ->writepages operation so that we can sync dirty data/metadata to upper filesystem. Signed-off-by: Chengguang Xu --- fs/overlayfs/inode.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index b584dca845ba..8cfa75e86f56 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "overlayfs.h" @@ -516,7 +517,20 @@ static const struct inode_operations ovl_special_inode_operations = { .update_time = ovl_update_time, }; +static int ovl_writepages(struct address_space *mapping, + struct writeback_control *wbc) +{ + struct inode *inode = mapping->host; + struct ovl_fs *ofs = inode->i_sb->s_fs_info; + struct inode *upper = ovl_inode_upper(inode); + + if (!ovl_should_sync(ofs)) + return 0; + return sync_inode(upper, wbc); +} + static const struct address_space_operations ovl_aops = { + .writepages = ovl_writepages, /* For O_DIRECT dentry_open() checks f_mapping->a_ops->direct_IO */ .direct_IO = noop_direct_IO, }; From patchwork Fri Nov 13 06:55:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902611 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EC95D14C0 for ; Fri, 13 Nov 2020 06:57:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C7CD2221E9 for ; Fri, 13 Nov 2020 06:57:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="f5A7qU7r" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726321AbgKMG50 (ORCPT ); Fri, 13 Nov 2020 01:57:26 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17117 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726301AbgKMG5Z (ORCPT ); Fri, 13 Nov 2020 01:57:25 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250625; cv=none; d=zoho.com.cn; s=zohoarc; b=YdFsYJG7LelMshOqLqEPOhn9ZgUNkx5Hm93qrSqAeMT8ao3wDGe1Sj0IiaFvuqp85JzshJhwF2QqWBmhOZhcpTa6bZuakI5W+1Z3xy0AcSuOVOsG5dFSjjzxbCTWTOjdtdULmx81RhPVwMP4FXLxg3+JLHRS1DHxRk/nZ9jMumY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250625; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=B0+tbtLn9OljLMIRvWu0xE+lpLb1nEucaDTR/MyR4K4=; b=DbBcgnrw412gv5Ol9frR2pdHlVg/CxMhohfF80w/4aOeuSNKA5MS1LBF9vrSUN9QccSI2Yh9aXnNX+TaTAScEPZh0LF9HXYzUf66DN0foil+765+GEaqvuHwO32JqHRY1HvyyaCC9DsT17J7Ey5LgNlgEyO0Rp0G2mxZRInnST4= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250625; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=B0+tbtLn9OljLMIRvWu0xE+lpLb1nEucaDTR/MyR4K4=; b=f5A7qU7rRjpR3zmSCud0xTmb1B5R8gF5rVKe8hliomkHECMls/seE6QZ4c9jVje8 KpV+tPkttdgxWadXpe/Iuuz2Uw+kB4DHYDIDeb1oJfWY35E1BC9KRFmuYKX8XTQcyFf tL4Gcew5qMHOJChUmDmUT+2WKL7q7gSrYY+7a9n0= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250623497596.5506827080176; Fri, 13 Nov 2020 14:57:03 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-4-cgxu519@mykernel.net> Subject: [RFC PATCH v4 3/9] ovl: implement overlayfs' ->evict_inode operation Date: Fri, 13 Nov 2020 14:55:49 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Implement overlayfs' ->evict_inode operation, so that we can clear all inode dirty flags. Signed-off-by: Chengguang Xu --- fs/overlayfs/super.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index d1e546abce87..883172ac8a12 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -390,11 +390,18 @@ static int ovl_remount(struct super_block *sb, int *flags, char *data) return ret; } +static void ovl_evict_inode(struct inode *inode) +{ + inode->i_state &= ~I_DIRTY_ALL; + clear_inode(inode); +} + static const struct super_operations ovl_super_operations = { .alloc_inode = ovl_alloc_inode, .free_inode = ovl_free_inode, .destroy_inode = ovl_destroy_inode, .drop_inode = generic_delete_inode, + .evict_inode = ovl_evict_inode, .put_super = ovl_put_super, .sync_fs = ovl_sync_fs, .statfs = ovl_statfs, From patchwork Fri Nov 13 06:55:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902617 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 33E9514C0 for ; Fri, 13 Nov 2020 06:57:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 10BDB221E9 for ; Fri, 13 Nov 2020 06:57:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="ZOx0TDR/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726310AbgKMG5d (ORCPT ); Fri, 13 Nov 2020 01:57:33 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17119 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726322AbgKMG5b (ORCPT ); Fri, 13 Nov 2020 01:57:31 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250626; cv=none; d=zoho.com.cn; s=zohoarc; b=OyKpOjG8bn+MTWZ0vUICiHaDF0O9XWteKgL9UXJw/YBDH3oY1Ju8vPO13xDvawj+BXFQtdCNkCUU/8CngDUFM1XDcq5HOkWT7jHwIBik2JiRm6IRk2k8j8OXUsqhCobEH3q9VJ/3cVwJhQ8W42Inq+iAJIFIixFpSDoZ+AAWric= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250626; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=52hU/5xFiMygbpFTzyIy/fGf4awhCIKsb/DSgoBBVHg=; b=Y7WlfsdWbl9w0ntakr94ZvSuEQGRA5DM6l4P0ZBdYK61O24MecNywOEkgBUqL6BUPE6UA5mxx8YKz1aZDE6s2T54F86oB17alkPaHnzM0LociiRmxfQcaxGEfd7GuRN6wOGusgrw1CLiFfEmRAVbaaXrlfjugXQlsj78p0XVj88= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250626; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=52hU/5xFiMygbpFTzyIy/fGf4awhCIKsb/DSgoBBVHg=; b=ZOx0TDR/FfCQDmELQvgGOvxu9UcCodEG090zoMiRVJAn0G9iMDqPnuR67sVhRlHH kaIXrsHfPXtqRm0O2Idmy4W1RfJs/EUxFNwPSWt9MavAe96/dTWUaNBoFGe7S9gtW+R DSiVClSMosY+q4QbvgwlrcsRL1ZXn9d0gP4HeUrE= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250625286875.6835648067917; Fri, 13 Nov 2020 14:57:05 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-5-cgxu519@mykernel.net> Subject: [RFC PATCH v4 4/9] ovl: mark overlayfs' inode dirty on modification Date: Fri, 13 Nov 2020 14:55:50 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Mark overlayfs' inode dirty on modification so that we can recognize target inodes during syncfs. Signed-off-by: Chengguang Xu --- fs/overlayfs/inode.c | 1 + fs/overlayfs/overlayfs.h | 4 ++++ fs/overlayfs/util.c | 14 ++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 8cfa75e86f56..342693657ab0 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -468,6 +468,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags) if (upperpath.dentry) { touch_atime(&upperpath); inode->i_atime = d_inode(upperpath.dentry)->i_atime; + ovl_mark_inode_dirty(inode); } } return 0; diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index f8880aa2ba0e..eaf1d5b05d8e 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -247,6 +247,7 @@ static inline bool ovl_open_flags_need_copy_up(int flags) } /* util.c */ +void ovl_mark_inode_dirty(struct inode *inode); int ovl_want_write(struct dentry *dentry); void ovl_drop_write(struct dentry *dentry); struct dentry *ovl_workdir(struct dentry *dentry); @@ -472,6 +473,9 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to) to->i_mtime = from->i_mtime; to->i_ctime = from->i_ctime; i_size_write(to, i_size_read(from)); + + if (ovl_inode_upper(to) && from->i_state & I_DIRTY_ALL) + ovl_mark_inode_dirty(to); } static inline void ovl_copyflags(struct inode *from, struct inode *to) diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index 23f475627d07..a6f59df744ae 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -950,3 +950,17 @@ char *ovl_get_redirect_xattr(struct ovl_fs *ofs, struct dentry *dentry, kfree(buf); return ERR_PTR(res); } + +/* + * We intentionally add I_DIRTY_SYNC flag regardless dirty flag + * of upper inode so that we have chance to invoke ->write_inode + * to re-dirty overlayfs' inode during writeback process. + */ +void ovl_mark_inode_dirty(struct inode *inode) +{ + struct inode *upper = ovl_inode_upper(inode); + unsigned long iflag = I_DIRTY_SYNC; + + iflag |= upper->i_state & I_DIRTY_ALL; + __mark_inode_dirty(inode, iflag); +} From patchwork Fri Nov 13 06:55:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902607 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0CCCE697 for ; Fri, 13 Nov 2020 06:57:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E2DE0221E9 for ; Fri, 13 Nov 2020 06:57:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="fN1p3qHE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726306AbgKMG5V (ORCPT ); Fri, 13 Nov 2020 01:57:21 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17162 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726083AbgKMG5V (ORCPT ); Fri, 13 Nov 2020 01:57:21 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250627; cv=none; d=zoho.com.cn; s=zohoarc; b=GAi4+scx30iIHDnQN8YCi8kPmibojRiC1FboyzwiUs3piRyG31gttKNs1SKzfEXDgFayZCYtauq5ks1MYGardyeSv0cnlsfStvpmkzkE1cyw6P4oLSN8G5uVWFqsJbsSM3MW1R8Af14P8A20nL68vepomrrLootZKZ6HtYV2AF4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250627; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=1rMQp9IOJti8/XXgWXenT0wQ+WQ0Zev3weD9o9T459I=; b=QP85FMNbWwqOXKdfH6a86uUAjNbKK+sWeUcXLyumyO1aBCnWZ3iakaqiydT4t5fa7vpS/O68V7X0znLRGd8R3W1Kb6LhG/15YChfH6Y6OBcvJkoDv7iy3BYA8I1q5xnbVLlrSlJV6LeSVWMmgVzBP46hK7Gof2kfo9LXJa1IbT8= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250627; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=1rMQp9IOJti8/XXgWXenT0wQ+WQ0Zev3weD9o9T459I=; b=fN1p3qHEb+RkQXh5kATudlJLkscCBLjZJF9XA2CpOcYW4FqUcz5GkqG/0PLe1myh O1hpTb6RjClskoKM16lFtpbXkKrD9s6Lkr/HSO5Luee3lPq0/dTBQNxkgJ9X+9BLaks J8aJPww2KCevNyii3xXDb01qTT+NJinq+cSn6DGE= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250625956931.8249748923657; Fri, 13 Nov 2020 14:57:05 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-6-cgxu519@mykernel.net> Subject: [RFC PATCH v4 5/9] ovl: mark overlayfs' inode dirty on shared mmap Date: Fri, 13 Nov 2020 14:55:51 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Overlayfs cannot be notified when mmapped area gets dirty, so we need to proactively mark inode dirty in ->mmap operation. Signed-off-by: Chengguang Xu --- fs/overlayfs/file.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index efccb7c1f9bc..3f9de5343513 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -486,6 +486,9 @@ static int ovl_mmap(struct file *file, struct vm_area_struct *vma) /* Drop reference count from new vm_file value */ fput(realfile); } else { + if (ovl_inode_upper(file_inode(file)) && + vma->vm_flags & VM_SHARED) + ovl_mark_inode_dirty(file_inode(file)); /* Drop reference count from previous vm_file value */ fput(file); } From patchwork Fri Nov 13 06:55:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902609 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0A23D697 for ; Fri, 13 Nov 2020 06:57:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E2C8A20B80 for ; Fri, 13 Nov 2020 06:57:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="Lqm3x8zy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726309AbgKMG5W (ORCPT ); Fri, 13 Nov 2020 01:57:22 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17163 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726301AbgKMG5V (ORCPT ); Fri, 13 Nov 2020 01:57:21 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250629; cv=none; d=zoho.com.cn; s=zohoarc; b=cd/r+FdpqhCnKkX3xMu4TUI+spYTT1m+d2ggyzYzTDjcG4EuqMrWO+fj2ghAPYDWaDv25aCNKqguQQzMkHHuFegFRwF0Lpofqpiiq5fLDIU2R67vFtONETKN3ZITIGBxFF/5qD1tSDP2rRgDlAi/U7poG8loCurGfHPbSgw+8hU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250629; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=Tlxw7j172mvgTwkWSXC4EiCFRBOcSo+hBBmaIMmXsg4=; b=h1RKBMbWqkthXkks2NHWKM0DvRwiYbQmnpEevia1bX1FD8deCJoilcKg4VjPTi8o9hzTgjSSG8YdblvaJW9lAU7WUlCx0OtjWe1PALgl4xwlrOp4so0ou1TSihaVeHxLl1VIeWlo0cLcbg/YOQiUMg/i7y6bINh40HqTqBzAcgM= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250629; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=Tlxw7j172mvgTwkWSXC4EiCFRBOcSo+hBBmaIMmXsg4=; b=Lqm3x8zyRHTSFas/hvciSYX5gMZI+EAVuJHUFG2+9T2ml0OFG5iApQLBbi4oZtwu sDqNtbkGQAGPF97RsmKUJ7Ot4lQ0LyY4pQXgvYS2yVHVp2W53c7EUMM0rPxZnVBZ65V l//3yMi3cBKbzbmJHMIrPea507V0laPOBGi/Tpbo= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250626771895.4721674647662; Fri, 13 Nov 2020 14:57:06 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-7-cgxu519@mykernel.net> Subject: [RFC PATCH v4 6/9] ovl: implement overlayfs' ->write_inode operation Date: Fri, 13 Nov 2020 14:55:52 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Implement overlayfs' ->write_inode to sync dirty data and redirty overlayfs' inode if necessary. Signed-off-by: Chengguang Xu --- fs/overlayfs/super.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 883172ac8a12..82e001b97f38 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -390,6 +390,35 @@ static int ovl_remount(struct super_block *sb, int *flags, char *data) return ret; } +static int ovl_write_inode(struct inode *inode, + struct writeback_control *wbc) +{ + struct ovl_fs *ofs = inode->i_sb->s_fs_info; + struct inode *upper = ovl_inode_upper(inode); + unsigned long iflag = 0; + int ret = 0; + + if (!upper) + return 0; + + if (!ovl_should_sync(ofs)) + return 0; + + if (upper->i_sb->s_op->write_inode) + ret = upper->i_sb->s_op->write_inode(inode, wbc); + + if (mapping_writably_mapped(upper->i_mapping) || + mapping_tagged(upper->i_mapping, PAGECACHE_TAG_WRITEBACK)) + iflag |= I_DIRTY_PAGES; + + iflag |= upper->i_state & I_DIRTY_ALL; + + if (iflag) + ovl_mark_inode_dirty(inode); + + return ret; +} + static void ovl_evict_inode(struct inode *inode) { inode->i_state &= ~I_DIRTY_ALL; @@ -402,6 +431,7 @@ static const struct super_operations ovl_super_operations = { .destroy_inode = ovl_destroy_inode, .drop_inode = generic_delete_inode, .evict_inode = ovl_evict_inode, + .write_inode = ovl_write_inode, .put_super = ovl_put_super, .sync_fs = ovl_sync_fs, .statfs = ovl_statfs, From patchwork Fri Nov 13 06:55:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902615 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 48A0214C0 for ; Fri, 13 Nov 2020 06:57:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E0BEF221EB for ; Fri, 13 Nov 2020 06:57:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="Wfh0uGQh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726339AbgKMG5b (ORCPT ); Fri, 13 Nov 2020 01:57:31 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17196 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726324AbgKMG5b (ORCPT ); Fri, 13 Nov 2020 01:57:31 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250628; cv=none; d=zoho.com.cn; s=zohoarc; b=ofv0uWhOwHJA6YfT5qvQJQnLCnRYI8fXM+59/oMWJ2oNaD30fA/f34DqO0AyrXmXESkGXJ5DWocDwI6IYscwRG3MVucynNd7rRCqu26z537shIerqqGoDopcGqB2f4r+eHj1kn1RXPUjFeEscxBjfA7sW3tJb9YxKNM2zoIe470= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250628; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=xTG8TIoGOE4iq++iWSnXZTF7oknun/VvMTPo2hC5z0Y=; b=lM6nE3J/YccHtai10/7gXSaqbh9orobrurxUGGCo3MgADtQH38n6HxGBCx7t/kWdWGl2vG/jNZbS/+iDOJ2rwfBaIREEpC4GOE1sDInTgEFrK0D2oqgAhGQfYLCMz0Z3KYK4TFr7y3RuXoG76IkwFqHVTBIkh1uxstfN4I8muNE= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250628; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=xTG8TIoGOE4iq++iWSnXZTF7oknun/VvMTPo2hC5z0Y=; b=Wfh0uGQh3iV7rXvIpjq4tjOaZMbkTF8T+3Yw0DfQ9g0x3ZQd+7wFk+4Wc4b+gK9x 2KtJWDqi9oyGPLVp4TX1orXrNc+4ZjbS0eRqUa1Nt0VpIYOUDH9n8Z/0/33T4qB+Nql uElMrpxqONy+J02jmwp1nYTMlHsWCoGJoFpiTuvk= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250627591598.3097181555864; Fri, 13 Nov 2020 14:57:07 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-8-cgxu519@mykernel.net> Subject: [RFC PATCH v4 7/9] ovl: cache dirty overlayfs' inode Date: Fri, 13 Nov 2020 14:55:53 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Now drop overlayfs' inode will sync dirty data, so we change to only drop clean inode. Signed-off-by: Chengguang Xu --- fs/overlayfs/super.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 82e001b97f38..982b3954b47c 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -425,11 +425,20 @@ static void ovl_evict_inode(struct inode *inode) clear_inode(inode); } +static int ovl_drop_inode(struct inode *inode) +{ + struct inode *upper = ovl_inode_upper(inode); + + if (!upper || !(inode->i_state & I_DIRTY_ALL)) + return 1; + return generic_drop_inode(inode); +} + static const struct super_operations ovl_super_operations = { .alloc_inode = ovl_alloc_inode, .free_inode = ovl_free_inode, .destroy_inode = ovl_destroy_inode, - .drop_inode = generic_delete_inode, + .drop_inode = ovl_drop_inode, .evict_inode = ovl_evict_inode, .write_inode = ovl_write_inode, .put_super = ovl_put_super, From patchwork Fri Nov 13 06:55:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902619 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B0261697 for ; Fri, 13 Nov 2020 06:57:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 94FCB221E9 for ; Fri, 13 Nov 2020 06:57:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="SLMS3bno" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726344AbgKMG5c (ORCPT ); Fri, 13 Nov 2020 01:57:32 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17194 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726301AbgKMG5b (ORCPT ); Fri, 13 Nov 2020 01:57:31 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250629; cv=none; d=zoho.com.cn; s=zohoarc; b=XxfuUQ2O6vD2Zbthi377ozGLKA6+svQR8Wp/5kNWihA75a9vY5JMbqlM3Z+0ufjNJH/g86Kbplao2jWEt2iLALRAss/9KqYELmr2pyLynMWHMwcmcHlV0hOAIOR7gRikRHQfUNRFpOGoVsM5m8WdDBTn2Ak1sUc+u+jQUduLT78= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250629; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=fvqzm+3URTfc4SNv5XnFr/jbDxgFHKTjuWBcOlIXqVs=; b=R3DRbasmzrGnV0g5pkwUb9zEehxcUy0wLCtGzDKnGVNv2bcUv+ySGJnZutLU8oCTnK87aHEKqkfsz7cQxl7SmH+ycTrzGKANM7hr7GzQf/JoFRIVz/d/BGAde6CZuPCsh+cXqj2AcILhlD6b9yk8wfy1hsP8hp2iZ9jCoDs+4VE= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250629; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=fvqzm+3URTfc4SNv5XnFr/jbDxgFHKTjuWBcOlIXqVs=; b=SLMS3bnoENjizdCvCH5EoGwrboGl+PJnz0RWQsA51CBd6fiQZhlINSsLJ+fE8OX1 bepADgcqWmpyM1quWj0fY+BD9jVZw4bfgK3LvgA6TnNw/gLtNsSWmIVWExPCJIv4ekZ 2a8A2yC7tsQ8ctB6FWZP3jriD6CuVUEg5JvotEBU= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250628208189.30840318851824; Fri, 13 Nov 2020 14:57:08 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-9-cgxu519@mykernel.net> Subject: [RFC PATCH v4 8/9] fs: export wait_sb_inodes() Date: Fri, 13 Nov 2020 14:55:54 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org In order to wait syncing upper inodes we need to call wait_sb_inodes() in overlayfs' ->sync_fs. Signed-off-by: Chengguang Xu --- fs/fs-writeback.c | 3 ++- include/linux/writeback.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 149227160ff0..55dafdc72661 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -2365,7 +2365,7 @@ EXPORT_SYMBOL(__mark_inode_dirty); * completed by the time we have gained the lock and waited for all IO that is * in progress regardless of the order callers are granted the lock. */ -static void wait_sb_inodes(struct super_block *sb) +void wait_sb_inodes(struct super_block *sb) { LIST_HEAD(sync_list); @@ -2449,6 +2449,7 @@ static void wait_sb_inodes(struct super_block *sb) rcu_read_unlock(); mutex_unlock(&sb->s_sync_lock); } +EXPORT_SYMBOL(wait_sb_inodes); static void __writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr, enum wb_reason reason, bool skip_if_busy) diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 8e5c5bb16e2d..53e826af33b6 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -198,6 +198,7 @@ void wakeup_flusher_threads_bdi(struct backing_dev_info *bdi, enum wb_reason reason); void inode_wait_for_writeback(struct inode *inode); void inode_io_list_del(struct inode *inode); +void wait_sb_inodes(struct super_block *sb); /* writeback.h requires fs.h; it, too, is not included from here. */ static inline void wait_on_inode(struct inode *inode) From patchwork Fri Nov 13 06:55:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11902613 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 65FE41668 for ; Fri, 13 Nov 2020 06:57:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4AE6622201 for ; Fri, 13 Nov 2020 06:57:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="SYlKePJo" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726334AbgKMG5a (ORCPT ); Fri, 13 Nov 2020 01:57:30 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17195 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbgKMG5a (ORCPT ); Fri, 13 Nov 2020 01:57:30 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1605250631; cv=none; d=zoho.com.cn; s=zohoarc; b=e0lAb8RDCCYzvONL1U3KDdGUiJoJLjNVjdMAyEunVuOrC8Ir/PlGokIld4+1+ru1cQu8rI+bS2Q5NR3z1i5Ucpq8nAwF4vtytlX07RiDHgfypLIggxVue0bFJzr2bzNFRKoAwhhfiUfJWEcEla+W1IMi/UFgZg8FAyrtuPYSBmk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1605250631; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=AGdcIpu2sjIuvnF+45DCM+5mBHj7CFq40gjiUkSTIhw=; b=G7Zgwv0Sl3vvAEYvKTKXb88qK+3TK9OEqViepl6a65KBx+uq0rxzHrSR+ek8enKVNzryo4lsHsyarHt7FXbrAlojWM3b1B8BUXQRVyBfkCoERwXFj3x1+moLYwLxXK05kol1c/hk8eZ4lQ0ABdzVr9/feY463SMFxiuKXNN2XgM= ARC-Authentication-Results: i=1; mx.zoho.com.cn; dkim=pass header.i=mykernel.net; spf=pass smtp.mailfrom=cgxu519@mykernel.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1605250631; s=zohomail; d=mykernel.net; i=cgxu519@mykernel.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type; bh=AGdcIpu2sjIuvnF+45DCM+5mBHj7CFq40gjiUkSTIhw=; b=SYlKePJojahSJGEMispwAbs2OVJ9NswyY7Kes/GIzy+MQlAG2NDm92eAneY2gEBh MxrDt1C5MeLSTxbpagahLo6Y3cDT1ODW5MxU+GxobnS9AzkKbsl7QA4AgCl3N9mKvfa FdprgUZlXihBua4MSCpdmcgphelTKNdQ3zxxHMQo= Received: from localhost.localdomain (116.30.195.173 [116.30.195.173]) by mx.zoho.com.cn with SMTPS id 1605250628939771.7262224747083; Fri, 13 Nov 2020 14:57:08 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, jack@suse.cz, amir73il@gmail.com Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201113065555.147276-10-cgxu519@mykernel.net> Subject: [RFC PATCH v4 9/9] ovl: implement containerized syncfs for overlayfs Date: Fri, 13 Nov 2020 14:55:55 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201113065555.147276-1-cgxu519@mykernel.net> References: <20201113065555.147276-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Now overlayfs can only sync dirty inode during syncfs, so remove unnecessary sync_filesystem() on upper file system. Signed-off-by: Chengguang Xu --- fs/overlayfs/super.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 982b3954b47c..58507f1cd583 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include "overlayfs.h" MODULE_AUTHOR("Miklos Szeredi "); @@ -270,8 +272,7 @@ static int ovl_sync_fs(struct super_block *sb, int wait) * Not called for sync(2) call or an emergency sync (SB_I_SKIP_SYNC). * All the super blocks will be iterated, including upper_sb. * - * If this is a syncfs(2) call, then we do need to call - * sync_filesystem() on upper_sb, but enough if we do it when being + * if this is a syncfs(2) call, it will be enough we do it when being * called with wait == 1. */ if (!wait) @@ -280,7 +281,11 @@ static int ovl_sync_fs(struct super_block *sb, int wait) upper_sb = ovl_upper_mnt(ofs)->mnt_sb; down_read(&upper_sb->s_umount); - ret = sync_filesystem(upper_sb); + wait_sb_inodes(upper_sb); + if (upper_sb->s_op->sync_fs) + ret = upper_sb->s_op->sync_fs(upper_sb, wait); + if (!ret) + ret = sync_blockdev(upper_sb->s_bdev); up_read(&upper_sb->s_umount); return ret;