From patchwork Sun Oct 25 03:41:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11855161 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 6CCEF697 for ; Sun, 25 Oct 2020 03:42:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 46ED6208B3 for ; Sun, 25 Oct 2020 03:42:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="KA22zK2S" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1766978AbgJYDmd (ORCPT ); Sat, 24 Oct 2020 23:42:33 -0400 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17127 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1766958AbgJYDmb (ORCPT ); Sat, 24 Oct 2020 23:42:31 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1603597311; cv=none; d=zoho.com.cn; s=zohoarc; b=P5FB1fGosSPBooNc5Z7gtdILnFBZuaoKzlgz9ERuwlZXyHjW51AtCp6eFTBxj0O/IEZ7AqM7Uigt8Pm2CdF9RK6McCv6HDmmUIRzhjXKFq13riNeToXPMiBvkJ+dm5B/8XqNZYwVBVT8eBXFeOt0JCYxOkAtuUqwGLQFms+1ids= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1603597311; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=NlKEQcKE+RNemWdOzA+NXWjXnwiavlahEmjugedQVBk=; b=HvoD7FRT2uE/R+I6zUodUReNKmPu/CtKQfytoW+0+Vmn90hlpF5Wtpr6KS4fR7ERj1Svt0k66MO7qSLQeAFKnks0rkBOsw8lQhXpkH6e+PR/2LM2EKNno9mjtK4Ht9FIioAAS7eW74lesei9XvryR1spl82NwB8KsgDiLxgOg+c= 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=1603597311; 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=KA22zK2S82JYVtJhkR1DJ6StAdF74aMgG5qm8l5R/KgtxkzB5m5TQkIwVa3Vl8gd fJEQJuk4hLPwoHUsSh66msUDrQc7gVy2CkV4nEUQjJdNFyquxPXkElvLkrnXx7vKFpu JcTuz1P5HDcFxmtk83ChEWuiSoc3t5M+/5sSZpNk= Received: from localhost.localdomain (113.88.132.7 [113.88.132.7]) by mx.zoho.com.cn with SMTPS id 1603597309263981.7178667108379; Sun, 25 Oct 2020 11:41:49 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, amir73il@gmail.com, jack@suse.cz Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201025034117.4918-2-cgxu519@mykernel.net> Subject: [RFC PATCH v2 1/8] ovl: setup overlayfs' private bdi Date: Sun, 25 Oct 2020 11:41:10 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201025034117.4918-1-cgxu519@mykernel.net> References: <20201025034117.4918-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 Sun Oct 25 03:41:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11855159 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 23963697 for ; Sun, 25 Oct 2020 03:42:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CC62121734 for ; Sun, 25 Oct 2020 03:42:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="JiUSoqqn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1766976AbgJYDmc (ORCPT ); Sat, 24 Oct 2020 23:42:32 -0400 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17126 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1766959AbgJYDm3 (ORCPT ); Sat, 24 Oct 2020 23:42:29 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1603597311; cv=none; d=zoho.com.cn; s=zohoarc; b=mf0E1TTJ/NgWDOtk+K3qkCCQG3eO8UaPWfKxjnXjNNNe37iaZItpr8aNLL1zWQNV+2ywZJZM7lTqII+DLRvwdXHQ1jfrt6BuNqGuQggHKe6oBXeFEj4gXtOZiSO0Xlkpchrq3sxOLRCdWo+obYYip5swIcAAofIkDhmtZxdwvdE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1603597311; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=v2u7N4GC7c2BP/wK2MnBMpBehRe3CxkK27J7gPJ6l0k=; b=KfREJwtBknnJVJpamBgPuUt4QQCrRge3LYqKMgU5fAVtYUAQwgbNrlTx9BN57Hf+E6kJKCfCO0D8NEuB74gP8vRpKeqeuicwN0snDG6+9pbYoXx/VNRssORkE0ip+Wbg/Q/AFj0UfuwhLZH/sytatJ667zR6xWVfRhoZ4lggYgY= 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=1603597311; 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=v2u7N4GC7c2BP/wK2MnBMpBehRe3CxkK27J7gPJ6l0k=; b=JiUSoqqnMcqHnuIjdM7JIxaeUFs7z1eZfbO2J/UrL16GZMAsoTbcY4NyCi1ec5Az bIzga9P8iPQY/0syhj67RuTAQLPMavpO1jyjj33X06WXSBt5LZTMEFqP+k+8LbfAyJz B1M+77BeT44i7HeBNtbcrLAqOVM76h2Dk5uLin+o= Received: from localhost.localdomain (113.88.132.7 [113.88.132.7]) by mx.zoho.com.cn with SMTPS id 160359731016595.65073159649478; Sun, 25 Oct 2020 11:41:50 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, amir73il@gmail.com, jack@suse.cz Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201025034117.4918-3-cgxu519@mykernel.net> Subject: [RFC PATCH v2 2/8] ovl: implement ->writepages operation Date: Sun, 25 Oct 2020 11:41:11 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201025034117.4918-1-cgxu519@mykernel.net> References: <20201025034117.4918-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 | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index b584dca845ba..f27fc5be34df 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,32 @@ 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 *upper_inode = ovl_inode_upper(mapping->host); + struct ovl_fs *ofs = mapping->host->i_sb->s_fs_info; + struct writeback_control tmp_wbc = *wbc; + + if (!ovl_should_sync(ofs)) + return 0; + + /* + * for sync(2) writeback, it has a separate external IO + * completion path by checking PAGECACHE_TAG_WRITEBACK + * in pagecache, we have to set for_sync to 0 in thie case, + * let writeback waits completion after syncing individual + * dirty inode, because we haven't implemented overlayfs' + * own pagecache yet. + */ + if (wbc->for_sync && (wbc->sync_mode == WB_SYNC_ALL)) + tmp_wbc.for_sync = 0; + + return sync_inode(upper_inode, &tmp_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 Sun Oct 25 03:41:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11855147 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 A9233139F for ; Sun, 25 Oct 2020 03:42:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 47129208B3 for ; Sun, 25 Oct 2020 03:42:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="fdXgDBR5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1766962AbgJYDm1 (ORCPT ); Sat, 24 Oct 2020 23:42:27 -0400 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17198 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762999AbgJYDm0 (ORCPT ); Sat, 24 Oct 2020 23:42:26 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1603597313; cv=none; d=zoho.com.cn; s=zohoarc; b=DB2hJ2FUkR6NuYApKC8dsPNuM2GiMPPJy3aw/us/c1x3T9a82+g4bXbvRkfVdBX6PvNR6XVAkDzfHCw7A32+oqWWMfGdSM14y4g7dUYiD+STyFsPEi0ua7nvLcBORFNQug9Md081RnmgfG6OMUCqZ3V4Bzl80AQWv9C5Td280b4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1603597313; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=nGXnYKrmS2iY+3f1RPRmJVtn3qKMacO4hCPw1V6UZoE=; b=ENGlqbFUrMD8sS6CrLcJYrbqmf4U9GNv/vH8BPX+lvyaPs7PvlHwca8hdoBcnZRolE/S5QoWe32YnK2X8rlg3SJW3zi9SA0UXOyXJWzswe6q2tL6VK+9/KF9FTRnTNmfEY/wBefZwA1MuMIyYcIPDWhoJJACxiYmDni1xlmckN0= 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=1603597313; 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=nGXnYKrmS2iY+3f1RPRmJVtn3qKMacO4hCPw1V6UZoE=; b=fdXgDBR5lQBKWOW/32HPCkx5jQ9nRQ3Hconb7I5rslwmRzqFeWwddcb6Hrzy3WvW /MaBUNUg6y8UgDMD8LiLvD+1anHoZ/dSaqlSBINhreFBNgW+cqPJmI1gaUwXTmSmJUA UbVHt4LEnlz0EUtfEwyT02Js93+hXh3wj34qDQu0= Received: from localhost.localdomain (113.88.132.7 [113.88.132.7]) by mx.zoho.com.cn with SMTPS id 1603597311648950.8497892445405; Sun, 25 Oct 2020 11:41:51 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, amir73il@gmail.com, jack@suse.cz Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201025034117.4918-5-cgxu519@mykernel.net> Subject: [RFC PATCH v2 4/8] ovl: mark overlayfs' inode dirty on modification Date: Sun, 25 Oct 2020 11:41:13 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201025034117.4918-1-cgxu519@mykernel.net> References: <20201025034117.4918-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 f27fc5be34df..426f70ca5d5e 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 Sun Oct 25 03:41:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11855157 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 A574A139F for ; Sun, 25 Oct 2020 03:42:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 80556208B3 for ; Sun, 25 Oct 2020 03:42:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="SVpGgyM2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1766974AbgJYDmb (ORCPT ); Sat, 24 Oct 2020 23:42:31 -0400 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17199 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762999AbgJYDma (ORCPT ); Sat, 24 Oct 2020 23:42:30 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1603597313; cv=none; d=zoho.com.cn; s=zohoarc; b=OXNIMd6e44eQsDLxJ5RrF753isJteQQLy2C7tHD3npEbJMvfjgpjUhrsHwRh1MdOpi7UZ5gsma2L7Ej2rdqXHrRA0LB+sL6Yg2Q2MBa69NI2+i7yMMvdEPqB8aQTLndP9NdVrgKxl9+h4nGOtms7IP0hCNZQ2jzSLozjUNtlvpo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1603597313; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=qENuAASwi2X1PpN6zhOfZQmsRqffxawsli97zMDsaBw=; b=X8wgJjnpl/vqPBpUw1mGjdxefGJ/HnXXUW3x2p7wB1ZJRKNH+41FX0HMkpztnJeyDqTY1JlUIyQ44C28IWuQzSSL73GlacgdfuXo6rVHzKaM1V0pnDuvHGCUBB4I69EKDS/TTaupudYDsElutuBlx7bMbYLvzliS7W59+OLr4+o= 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=1603597313; 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=qENuAASwi2X1PpN6zhOfZQmsRqffxawsli97zMDsaBw=; b=SVpGgyM2DqAK0A217fGIwG80M/r6vQ1gZYST9G2lAoGa+LvgA+G0hHM/WJcDCpdI vSgGjVzkkv5pUSxjzHWWRMFGAx84HHJC/PlPSASD/r/TOqaIAaZj6rxzfz67JAtrRrE F+jgUafLpZ5W3LUZmewkoh6ZGdnf2PGD2fzGMExM= Received: from localhost.localdomain (113.88.132.7 [113.88.132.7]) by mx.zoho.com.cn with SMTPS id 1603597312402239.5387742402878; Sun, 25 Oct 2020 11:41:52 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, amir73il@gmail.com, jack@suse.cz Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201025034117.4918-6-cgxu519@mykernel.net> Subject: [RFC PATCH v2 5/8] ovl: mark overlayfs' inode dirty on shared writable mmap Date: Sun, 25 Oct 2020 11:41:14 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201025034117.4918-1-cgxu519@mykernel.net> References: <20201025034117.4918-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 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index efccb7c1f9bc..cd6fcdfd81a9 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -486,6 +486,10 @@ static int ovl_mmap(struct file *file, struct vm_area_struct *vma) /* Drop reference count from new vm_file value */ fput(realfile); } else { + if (vma->vm_flags & (VM_SHARED|VM_MAYSHARE) && + vma->vm_flags & (VM_WRITE|VM_MAYWRITE)) + ovl_mark_inode_dirty(file_inode(file)); + /* Drop reference count from previous vm_file value */ fput(file); } From patchwork Sun Oct 25 03:41:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11855155 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 6EFF014B4 for ; Sun, 25 Oct 2020 03:42:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 47477207E8 for ; Sun, 25 Oct 2020 03:42:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="Di4qBkqG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1766972AbgJYDma (ORCPT ); Sat, 24 Oct 2020 23:42:30 -0400 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17172 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1766952AbgJYDm2 (ORCPT ); Sat, 24 Oct 2020 23:42:28 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1603597315; cv=none; d=zoho.com.cn; s=zohoarc; b=Uio+yvAbRvpppYuSFlt6C6AvUIfdDpmfIWeAHmAScHpHJhjhMmoICf68I1N5IbzNtMvTIwdJnehkY6tNRFkZqnbPWeNO3Jj1vNew0fLLDDOfbxzIxieuDKdga/6FKhUiRZKQkpA9SOgFWl6J0RQ4yhSUAj4vRMyda8DoRemtrx4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1603597315; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=oDIxrUfghq2f7rf9mI7jR3OrOFcG8ituLCpBBf/8iP0=; b=gHz016tmd8z4NzRcdLYAhtBUXvXUc/lfsMmGIWNxrbhJTQTJcpUCSAKCKw++ha8y0+kjycZw0mbicPWSDU+iTl8dxxVoQHb5wCB7q7fZiYLZe1a2HIxJeZOZ18nOPY/mWcl/EJEaz2M92oMeSAdgTSpPS8OWhAIo5ub4G2L09yw= 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=1603597315; 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=oDIxrUfghq2f7rf9mI7jR3OrOFcG8ituLCpBBf/8iP0=; b=Di4qBkqGuTx2y/KwFaH0CU58oYobH8jNLK4u3lexOW+wwvO8deox10L2pUdXpofk TvvDVpmAb2bNWwDzQfw7UnyCRd6KzdpPkO9I4jINP3UaGA7aVpH17LWuwwa5SHY8pOu eFqp+nV/D7Y08m7JY9Opyg4LBWtFHwqr5oFmE2gU= Received: from localhost.localdomain (113.88.132.7 [113.88.132.7]) by mx.zoho.com.cn with SMTPS id 1603597313967178.218115280814; Sun, 25 Oct 2020 11:41:53 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, amir73il@gmail.com, jack@suse.cz Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201025034117.4918-8-cgxu519@mykernel.net> Subject: [RFC PATCH v2 7/8] ovl: cache dirty overlayfs' inode Date: Sun, 25 Oct 2020 11:41:16 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201025034117.4918-1-cgxu519@mykernel.net> References: <20201025034117.4918-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 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 960e79e7a8b5..1d04117fb6ad 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -421,11 +421,21 @@ static int ovl_write_inode(struct inode *inode, return ret; } +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, .write_inode = ovl_write_inode, .evict_inode = ovl_evict_inode, .put_super = ovl_put_super, From patchwork Sun Oct 25 03:41:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11855163 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 EC31F139F for ; Sun, 25 Oct 2020 03:42:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CFBFC207F7 for ; Sun, 25 Oct 2020 03:42:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="F8tZJMVX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1766981AbgJYDmn (ORCPT ); Sat, 24 Oct 2020 23:42:43 -0400 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17173 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1766958AbgJYDmm (ORCPT ); Sat, 24 Oct 2020 23:42:42 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1603597315; cv=none; d=zoho.com.cn; s=zohoarc; b=pA0pH32x4imtrjsVanGnCFG+ScEigAqyEkm3+d44yyhr8I6rIdfz/LrSpogzBjOTo5GD62C4StEzduARXDRU1ltOhhyf2i7Km4263vmCPi5PsQiSlAsxNDlqGPpP3u+iEGbghO/jPTAPe1U1FgEIqUi3dnuG/7D2Bf/E98nEFhg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1603597315; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=vu/ag4Tg6S+Hh8bpKgvQ+I+D5rt1ARq7efArRp49AkA=; b=U1Cf960g2plCFVPSNteG0fZ20YPwJVHU9R0NcZHreWNrAKcsXTjCGAOkCn67DoF8q+r+XRmMnvHSTPM1U175Z8ttf/Bo0HUhw8JyeIlBjKi6bj6Hap05JlnFRaRc8edPDU3GumYO6LNdE3BjXKZGFM9LPVwM86OnWoOj3934NhM= 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=1603597315; 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=vu/ag4Tg6S+Hh8bpKgvQ+I+D5rt1ARq7efArRp49AkA=; b=F8tZJMVXnF/UoKKQdtrd6Vf8XLcubKuViJAc+CKCOWq0cDQmsYXFzqqTXIXPSLmu lzLAaBIxe5ljhhY9+b4sScKwxpi2FRZEKNs1axdphb5uAPPnnWvFzohEqqsWeWrZS6f NwWMUEmM3vx6iIxqJ5BYeaN+yHpf7bDJqpQ/wklE= Received: from localhost.localdomain (113.88.132.7 [113.88.132.7]) by mx.zoho.com.cn with SMTPS id 160359731470039.422630673296794; Sun, 25 Oct 2020 11:41:54 +0800 (CST) From: Chengguang Xu To: miklos@szeredi.hu, amir73il@gmail.com, jack@suse.cz Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Chengguang Xu Message-ID: <20201025034117.4918-9-cgxu519@mykernel.net> Subject: [RFC PATCH v2 8/8] ovl: implement containerized syncfs for overlayfs Date: Sun, 25 Oct 2020 11:41:17 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201025034117.4918-1-cgxu519@mykernel.net> References: <20201025034117.4918-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 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 1d04117fb6ad..df33e8c8f1d0 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -271,8 +271,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) @@ -281,7 +280,10 @@ 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); + 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;