From patchwork Sun Nov 8 14:02:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889551 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 59013921 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 31D21206F4 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="gG+yV7gk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728408AbgKHOEB (ORCPT ); Sun, 8 Nov 2020 09:04:01 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17144 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728197AbgKHOEA (ORCPT ); Sun, 8 Nov 2020 09:04:00 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844203; cv=none; d=zoho.com.cn; s=zohoarc; b=EFb7ie2eBft9DAACASh+Si67cfGqBMj6e4T3doS1SBJ+AYkyjeBOnkByrHaS8JtJ0/yTQMIfiOz3LFjkazme0eJuqzcdNNZKojCV46UoPQiQi0ft6yhRYbjcRXbKA/g0yeCXsw38HVvtloaWJlD7M75mWTnVR5LSXsZtjINg+bc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844203; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=NlKEQcKE+RNemWdOzA+NXWjXnwiavlahEmjugedQVBk=; b=RVThziG2W7VqlXcEoJWa6gZoKWS5XjiPf57cCVzaNJ2bdynO8a/glDC1rbP5yU1/smBpaHXF7y1k9mS+8zcLyzj49GXWpMKa/TeLgwHoXQhtGD93TDVl2orsJDWK3Lo4p/L+Um6WYLi2VYYWAO0OHnLHlAfDecbfo+S5gWAU/FA= 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=1604844203; 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=gG+yV7gkAiG26ts0p7CxofxCPTrgpVJ8T2aqttA6dZH42uUDA3GrMXV38X4/51Ly wBcW56ZU6B9ohCFFcBvrh8Avgo5Yvcg78LPZZkYw0m7Oq3zwD9Mz4791/gHZNx+jx0Z nY3aYQOHkTh0yV8wx2rzlyhehKplI6G2dhDHb+I4= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844202208314.43846728206813; Sun, 8 Nov 2020 22:03:22 +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: <20201108140307.1385745-2-cgxu519@mykernel.net> Subject: [RFC PATCH v3 01/10] ovl: setup overlayfs' private bdi Date: Sun, 8 Nov 2020 22:02:58 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 Nov 8 14:02:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889563 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 4A8B7921 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2EAB1206F4 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="Be8ZJ51p" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728481AbgKHOEG (ORCPT ); Sun, 8 Nov 2020 09:04:06 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17152 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727570AbgKHOEF (ORCPT ); Sun, 8 Nov 2020 09:04:05 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844205; cv=none; d=zoho.com.cn; s=zohoarc; b=BKtvap62UzG0f6dME/cwvpzkz3sDm8w5ma0+sASIdvHQLQ8FA1pJQ7fJETCxYbcHPl+uNOg/azpXM4bf4sddwxtSjJQG3oVhwPprb1wAF9Ty5hXTzQNzp2ve9CwGVPCzwi3kljBIvChoLmT6v7BeYDNLDiyRVBibP51gbYI5alI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844205; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=9en0t344dZx9gFZ3T+wZUNYnBIjQcpi5KhVT7rOuUWw=; b=LzsbXCG9sq5O5PahrLnc/JpVMi7Pq+1fsU95PHy0aQpTHSkTHLONQcOEz1rE6iNVUPrL6andLq5o4DC+ZYov6aEQayYFrUUa0IreOHEb7bVDEu2Hz3Cu2Ig2i7131RsOS0Xt9SfVUJJ3ZqXhQ0MfBnBtYTUUsY5zgVhSvMpX8tI= 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=1604844205; 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=9en0t344dZx9gFZ3T+wZUNYnBIjQcpi5KhVT7rOuUWw=; b=Be8ZJ51p7eqMmahS9JGWQYscfllTzS6i8MKXtwSR7UEKw2ozX1pg4ZpbyesV50O9 OdQnXwG6SJRToBWz2n6kycrdmXohRlgkgJsxdXSv/kjrAST90Qw+RfpOiwaEEw1LxkH fXIv0cG5EULG1vGNnrOmNLQXqy46c44d/e8+6dOA= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844202883136.1258273953929; Sun, 8 Nov 2020 22:03:22 +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: <20201108140307.1385745-3-cgxu519@mykernel.net> Subject: [RFC PATCH v3 02/10] ovl: introduce waiting list for syncfs Date: Sun, 8 Nov 2020 22:02:59 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Introduce extra waiting list to collect inodes which are in writeback process. Signed-off-by: Chengguang Xu --- fs/overlayfs/ovl_entry.h | 5 +++++ fs/overlayfs/super.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h index 1b5a2094df8e..72334662253a 100644 --- a/fs/overlayfs/ovl_entry.h +++ b/fs/overlayfs/ovl_entry.h @@ -79,6 +79,9 @@ struct ovl_fs { atomic_long_t last_ino; /* Whiteout dentry cache */ struct dentry *whiteout; + /* syncfs waiting list and lock */ + struct list_head syncfs_wait_list; + spinlock_t syncfs_wait_list_lock; }; static inline struct vfsmount *ovl_upper_mnt(struct ovl_fs *ofs) @@ -129,6 +132,8 @@ struct ovl_inode { /* synchronize copy up and more */ struct mutex lock; + /* link to ofs->syncfs_wait_list */ + struct list_head wait_list; }; static inline struct ovl_inode *OVL_I(struct inode *inode) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index d1e546abce87..1e21feb87297 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -184,6 +184,7 @@ static struct inode *ovl_alloc_inode(struct super_block *sb) oi->lower = NULL; oi->lowerdata = NULL; mutex_init(&oi->lock); + INIT_LIST_HEAD(&oi->wait_list); return &oi->vfs_inode; } @@ -1869,6 +1870,9 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) if (!ofs) goto out; + INIT_LIST_HEAD(&ofs->syncfs_wait_list); + spin_lock_init(&ofs->syncfs_wait_list_lock); + err = super_setup_bdi(sb); if (err) goto out_err; From patchwork Sun Nov 8 14:03:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889571 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 E670017EC for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CAEC4206F9 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="EVmBOh7k" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728540AbgKHOEN (ORCPT ); Sun, 8 Nov 2020 09:04:13 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17154 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728307AbgKHOEL (ORCPT ); Sun, 8 Nov 2020 09:04:11 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844204; cv=none; d=zoho.com.cn; s=zohoarc; b=AfIW3PvGM4TqXsUx9IqomkG4qfwSEVbO2Tiqo3xv5ZgP7tsPVD7+t5WQsFQ7DZuQkMZKj7baVuac50Ya5uTR+Tm6iFVcFL18wIwnSSp8M8920VWHYQPGtzAMDZUbFE+TZ0GqawIqpGTuMsEzyxam3741A28uTiMVdVq7TwRqTIo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844204; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=XY1M6ngEHJazNPj3h/d5suhPsLhPCHaUvxhKABnNVTo=; b=D56m6oaZYLtgh9S78SCkK//0Zy81bes05Ed9dPlLmz1HGl/B81ycxmVIo+JedgPLi0nlyg7Sz7quLnSNLsgYWN6m/Twojt45QAvj3ZcZ/rflpsDB012thN+7ZhwoHVjp8XnhBIolyFOdafKQE2lambW6RT0M1OSb7ptBajSa25Q= 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=1604844204; 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=XY1M6ngEHJazNPj3h/d5suhPsLhPCHaUvxhKABnNVTo=; b=EVmBOh7kJ7TnDXi24rKjT0RnLSJs+h5oU3RBNdDMxAVeg9arsCkvOVjYHVtsn0s0 ka38P1Bq6ir2F/77RbNDZdGxc+SU45bDyoBN+U5P+FLOxz3iM3eiZvLU6jRBL2Hgrki Hppeq4p16TCxOa5oiW/WTtaIvYrnyYHkTYAuO3lU= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844203598419.0458980977053; Sun, 8 Nov 2020 22:03:23 +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: <20201108140307.1385745-4-cgxu519@mykernel.net> Subject: [RFC PATCH v3 03/10] ovl: implement ->writepages operation Date: Sun, 8 Nov 2020 22:03:00 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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. If writeback mode is sync_mode we add overlayfs inode to extra syncfs wait list so that we can wait completion in ->syncfs. Signed-off-by: Chengguang Xu --- fs/overlayfs/inode.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index b584dca845ba..1f5cbbc60b28 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,30 @@ 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); + int ret; + + if (!ovl_should_sync(ofs)) + return 0; + ret = sync_inode(upper, wbc); + if (!ret && wbc->for_sync == 1) { + spin_lock(&ofs->syncfs_wait_list_lock); + if (list_empty(&OVL_I(inode)->wait_list)) + list_add_tail(&OVL_I(inode)->wait_list, + &ofs->syncfs_wait_list); + spin_unlock(&ofs->syncfs_wait_list_lock); + } + + return ret; +} + 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 Nov 8 14:03:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889561 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 21A021865 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 05FEB206F4 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="BvwIci7S" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728471AbgKHOEG (ORCPT ); Sun, 8 Nov 2020 09:04:06 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17153 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728363AbgKHOEE (ORCPT ); Sun, 8 Nov 2020 09:04:04 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844205; cv=none; d=zoho.com.cn; s=zohoarc; b=SyWtE7/Bv19ZpzS7Md8FwbFWM4Qa5JlNdMXJmSRiJQpZdYj1OXWyFnoRdl4kaCG1URRiVPR0TfaKjV+nLZhz8npbPkQZdKbN+/HpON9GdgxfK3WD3jydu+m64dhz1lIYOVX5tC4SqtAc/YpOtJR0NON31ZIAMgkAv2J0iUSzbQ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844205; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=rwSqy0IB5IFNNIniPqVlfmHQOsetCWP9pAfz+bgiWLc=; b=hw6Xb80ms39T6jy4w5F5mq67dFM9oq02YeSa6t6leaO5YTJalmGIjRDro8IYxak4iJtGp+eEHwfAJM8HdVupIyjv5lDjkWFB0vh7fdLFBFPI1/I7JJc4g32CrL/sBAuQ6jZ/gWtKS8sYrx2y44t7dlMmzPtAtyREHZUJ8jD6Zck= 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=1604844205; 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=rwSqy0IB5IFNNIniPqVlfmHQOsetCWP9pAfz+bgiWLc=; b=BvwIci7Sx2kV0v7A1MdIk4YKr2WzSS4ENv35gehIrsKL0Ja+n6rNwerjnxNrbloC Y9Nz+aY6QHEvxEHRNOpcwIOxqhtm0AsOHXgJgRxWGmIpz/g3qzgOQ7F5sdXt4stz45+ z0iFwD99Bcsph9N7Co/oTUhYM9Sm5jgBB7S77I2A= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844204313604.0371525151885; Sun, 8 Nov 2020 22:03:24 +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: <20201108140307.1385745-5-cgxu519@mykernel.net> Subject: [RFC PATCH v3 04/10] ovl: implement overlayfs' ->evict_inode operation Date: Sun, 8 Nov 2020 22:03:01 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 1e21feb87297..694eff76eb09 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -391,11 +391,26 @@ static int ovl_remount(struct super_block *sb, int *flags, char *data) return ret; } +static void ovl_evict_inode(struct inode *inode) +{ + struct ovl_fs *ofs = inode->i_sb->s_fs_info; + + if (!list_empty(&OVL_I(inode)->wait_list)) { + spin_lock(&ofs->syncfs_wait_list_lock); + if (!list_empty(&OVL_I(inode)->wait_list)) + list_del(&OVL_I(inode)->wait_list); + spin_unlock(&ofs->syncfs_wait_list_lock); + } + 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 Sun Nov 8 14:03:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889553 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 7360C16C1 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 578D5206F9 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="DbDJWwoQ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728425AbgKHOED (ORCPT ); Sun, 8 Nov 2020 09:04:03 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17108 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727949AbgKHOEC (ORCPT ); Sun, 8 Nov 2020 09:04:02 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844207; cv=none; d=zoho.com.cn; s=zohoarc; b=mZEqx/zDvG0qVkObe2bk5Y4KJBaSChWrsMoAA7o7mae+dOqPpo/DnAcVOCzcITrI/xTMeUlpluxMioiaCt9mIeZC+K8r7YgDZukFtb/Hq+B8LUKMe8hJtlJh979sZW2THuswWAjHXwyejbotrQRevzcexWfpYoRHdpo2U1tXy84= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844207; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=xaT5YckiSr6leqc619hQ04I9/4r/88vz4xBhhTiT864=; b=MaokpMJMSPeoMKwOYxDvhNOPPXN74W5/RpxRvacm1y9DVyMkt9tepzBOWcnDvZuimcawKFv2Fnxti5gf4byPyM8TejuVc4YIdiVFt35KAk6ZAw5QzIcz5Oxt13Z4A8Gr7NyU80T0b2CyIx1hZ7vM2Wo5jfb1l6rCdHZbNwVJ8rM= 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=1604844207; 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=xaT5YckiSr6leqc619hQ04I9/4r/88vz4xBhhTiT864=; b=DbDJWwoQ1iUZdYVbGGBFqIQURxcypr2B+7dlwWAs3q78Ie1q8QOcJ8slr2cMMOcD XGub2VrFG6YfYWjQx4aOPT7T8RP0HmF4Z7VbIru4TWQMXe5JWtC2TLfUz7IcZV2W8HB 4zmS615xh6nwmNo4k8SY+LDa2TH4UB0//QMlz5TQ= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844205015120.49605682451715; Sun, 8 Nov 2020 22:03:25 +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: <20201108140307.1385745-6-cgxu519@mykernel.net> Subject: [RFC PATCH v3 05/10] ovl: mark overlayfs' inode dirty on modification Date: Sun, 8 Nov 2020 22:03:02 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 1f5cbbc60b28..faa5c345f0cf 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 Nov 8 14:03:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889567 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 9C87C17D3 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 79956206F4 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="K7cFuRDp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728511AbgKHOEJ (ORCPT ); Sun, 8 Nov 2020 09:04:09 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17109 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728307AbgKHOEH (ORCPT ); Sun, 8 Nov 2020 09:04:07 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844206; cv=none; d=zoho.com.cn; s=zohoarc; b=J89cnRBdzFs0ke1NLlMh0SfJ0saZNsmGJ6d9nhrheW7ZetqD+Y3TX8r1hNMLheobb4eF/toUL0wcyksIoX8Df1ZdO36lawyq/uHS+MauIC2Mr0xdyFY8nZb/roqt0O8Uwh/BkwaOg2Yh5948Or//Wh45D/IH5VNnVZhWw1j3/kc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844206; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=+4OIy9gOCkiY1FUz5xPiYjM/P/B9KenL2bi1cR2ViTY=; b=pq6S2Prroh/lG7ggl1LXcdal5fb/lwD5WPB3rpldlh24YzRiXH9dcNj7RmoZ1J3v7sYdmUR8REoV9lo5512z6ZsOI43zA7Ra+oT2J09cAYBNtFApr2A4oNlYzuTRylaVcm4Xd6ymVaj0WlHdY+f3VhxBkkX2ghtWl7I5iiZ6oNo= 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=1604844206; 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=+4OIy9gOCkiY1FUz5xPiYjM/P/B9KenL2bi1cR2ViTY=; b=K7cFuRDpC8Xe00nrj/68Dm+X5rMxX0FtE6rxT7zSVHelHkUupWCSEd+OSf2UDq+a KDhQddXrv0AVj9UPMq4ZHD8jZIrppaAuyTLZMYHlXeEK8McHt3SXWDy3MSkl7cyeczB eVEFj6ltUa1Zyhy1CUVjXXeFvRNHi0SifR40j2Ik= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844205643289.42420789308403; Sun, 8 Nov 2020 22:03:25 +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: <20201108140307.1385745-7-cgxu519@mykernel.net> Subject: [RFC PATCH v3 06/10] ovl: mark overlayfs' inode dirty on shared mmap Date: Sun, 8 Nov 2020 22:03:03 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index efccb7c1f9bc..662252047fff 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -486,6 +486,8 @@ 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)) + ovl_mark_inode_dirty(file_inode(file)); /* Drop reference count from previous vm_file value */ fput(file); } From patchwork Sun Nov 8 14:03:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889555 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 9E42815E6 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 809FB206F4 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="QYaPIrsV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728433AbgKHOEE (ORCPT ); Sun, 8 Nov 2020 09:04:04 -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 S1727844AbgKHOED (ORCPT ); Sun, 8 Nov 2020 09:04:03 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844207; cv=none; d=zoho.com.cn; s=zohoarc; b=jSyydPPDI06nqpbPUxBlX9SMyH3EHLzB6uoGQaJmgugonhbOY47jf2bg9RIf0L6DD24QeXcQygz+NPjrqVlpk5MTVCzvOxISjkGKsfJ9xiMYY1NuN93egMj9uYuhe4gfMMoFxbj2Zjsu6AIqB1u3ZeL6XUN3a7CH/HY1A+M5CKY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844207; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=Hs9NI+ahedQ8YyeMtVZWX4Uqq8hHYsmgHZ2u4WxWbuM=; b=ClZ4nlAxYcqppxC1bU5r8O35qwePv4VMM8Wov4VVaKzrlFgG72SiaZxnBmKim16G0qgULK/sLDktPUVYGkQln5vKA1Fc/m5AJ8Ye65Gd4glvEFGJfOHTqQ+FTUSCg4XN/SuEiUmHaesaAfq1unUtFqF9l3ETtAL9u6CExnOk0Q8= 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=1604844207; 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=Hs9NI+ahedQ8YyeMtVZWX4Uqq8hHYsmgHZ2u4WxWbuM=; b=QYaPIrsVQ0xd946iFhvwE7UGRRyP1rMwBzdEu9vklvUecgV5LhBeM0XsHtAULS9e pS9yFFCh/lnzA1f3NxBJpT5g6vGWOlWBl0oHixYJLnOgKYjYlgQz0eQaaqkSyCA5kPn r1V1q1bY33M1izl8he9ryW2spPpJUnwbDE0m+9GE= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844206284238.6408227363977; Sun, 8 Nov 2020 22:03:26 +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: <20201108140307.1385745-8-cgxu519@mykernel.net> Subject: [RFC PATCH v3 07/10] ovl: implement overlayfs' ->write_inode operation Date: Sun, 8 Nov 2020 22:03:04 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 694eff76eb09..0ddee18b0bab 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -391,6 +391,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); + + iflag |= upper->i_state & I_DIRTY_ALL; + + if (mapping_writably_mapped(upper->i_mapping) || + mapping_tagged(upper->i_mapping, PAGECACHE_TAG_WRITEBACK)) + iflag |= I_DIRTY_PAGES; + + if (iflag) + ovl_mark_inode_dirty(inode); + + return ret; +} + static void ovl_evict_inode(struct inode *inode) { struct ovl_fs *ofs = inode->i_sb->s_fs_info; @@ -411,6 +440,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 Sun Nov 8 14:03:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889559 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 EE1A61744 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D2B54206F4 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="dsb89p8M" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728453AbgKHOEF (ORCPT ); Sun, 8 Nov 2020 09:04:05 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17143 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728367AbgKHOEE (ORCPT ); Sun, 8 Nov 2020 09:04:04 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844209; cv=none; d=zoho.com.cn; s=zohoarc; b=Hb8mOqcwPs7reuotzqeUM7DFpz9/aTbcdbXNMnuYYIPkVWS+noyub7wT0AszL/xCG+JhDzIREdjN4WdJTL/U55pPNXMLT0L0jlcX1ONXI14ZNtqhBiYsHFDbT7VSCr+rxYiD6H7xZPA+ufHLJ6/cHaOS/2TjbM0lUA5Rj95gwOM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844209; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=TPYWu1w6xFm+9/OPpeWSH1thB8t1sD+PmNY4JWTD5PM=; b=RZIDaNskNAZOXzxqX4R2Jy1DV/y4FjEy+GK2u4hhaLuxCdkpOdXzZtywV5r6ETQ05+wnNea8cHmRxHn1DRARLMlHLBETMwNbxfLT8fwZPvN3Az94DEGKB7eOQHfPbc+c2QecafB7mSsKVxu0cM21JDbaUazafc+GHF2RZ7jSuz4= 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=1604844209; 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=TPYWu1w6xFm+9/OPpeWSH1thB8t1sD+PmNY4JWTD5PM=; b=dsb89p8MQT0RlBOlNeUCBWQVITMUnFkMexQjW25X+1qXHySRZHvj/g91zqv6k5S/ XuA4SYYvAwbA/hHYWg120kx3deE+iubxIJzzGCKUqoaakDUS8dGBCZr6537XEHCyCeN NHSGDPVR0S9m1n5Jn8W2WK/OeXVxduJjorvQr3S0= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844206915521.7392697274494; Sun, 8 Nov 2020 22:03:26 +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: <20201108140307.1385745-9-cgxu519@mykernel.net> Subject: [RFC PATCH v3 08/10] ovl: cache dirty overlayfs' inode Date: Sun, 8 Nov 2020 22:03:05 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 0ddee18b0bab..e5607a908d82 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -434,11 +434,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 Sun Nov 8 14:03:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889565 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 6D10516C1 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 526D0206F4 for ; Sun, 8 Nov 2020 14:04:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="GOuvnHYX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728496AbgKHOEI (ORCPT ); Sun, 8 Nov 2020 09:04:08 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17142 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728191AbgKHOEF (ORCPT ); Sun, 8 Nov 2020 09:04:05 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844208; cv=none; d=zoho.com.cn; s=zohoarc; b=DWXbuPQKndyoOo9VWXF0+CIVp6d9/xxihD/f7tL/uG/6uvMxt73b9IbhAP5ZGwek5xU+6oBYG9vXjTvjIkDrF00YxmCwkClU2m3f1TMZiOcHKWljo3N6/la12A6R24FXL+wrfLO5H242jdjzid2mXd2D/Lp5hqJbfbQafKIZNbg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844208; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=KjtNuGCbko1IHimLoa0WxpHVk1G+1n/XuLBptbV9oIo=; b=B6vfkYeZu1H5bWU9EX9bWLukSaiH/ERxY95D9kcJKG07J1djIIm53ES9IiokLQcwxE2evroEi6CCGsY585BIoFO5EZf/+k18BLOy2PKwRom7TgkOccqpmUExZSr6AmrdkuJEwhb36aDjnmiV309SUj7WhGzD29xa881RU6XNktU= 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=1604844208; 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=KjtNuGCbko1IHimLoa0WxpHVk1G+1n/XuLBptbV9oIo=; b=GOuvnHYXY8eo6+H0lLRZRH07XlC4c+uDRQ/TSKzqbeZrMi1H+phhjiQkwCgPLqs3 96F6cNSuu7o+Z6imqi72c3W6M7hr9vZcQVQzr3IyXg4Ss1EEWteIAycQrj0pZ85CDU3 KZbHl9wRfCkw4HJ5iQ85buZ0I0zyl4Wtbb7/Hrnc= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844207560846.3256977761386; Sun, 8 Nov 2020 22:03:27 +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: <20201108140307.1385745-10-cgxu519@mykernel.net> Subject: [RFC PATCH v3 09/10] ovl: introduce helper of syncfs writeback inode waiting Date: Sun, 8 Nov 2020 22:03:06 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-1-cgxu519@mykernel.net> MIME-Version: 1.0 X-ZohoCNMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Introduce a helper ovl_wait_wb_inodes() to wait until all target upper inodes finish writeback. 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 e5607a908d82..9a535fc11221 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -255,6 +255,36 @@ static void ovl_put_super(struct super_block *sb) ovl_free_fs(ofs); } +void ovl_wait_wb_inodes(struct ovl_fs *ofs) +{ + LIST_HEAD(tmp_list); + struct ovl_inode *oi; + struct inode *upper; + + spin_lock(&ofs->syncfs_wait_list_lock); + list_splice_init(&ofs->syncfs_wait_list, &tmp_list); + + while (!list_empty(&tmp_list)) { + oi = list_first_entry(&tmp_list, struct ovl_inode, wait_list); + list_del_init(&oi->wait_list); + ihold(&oi->vfs_inode); + spin_unlock(&ofs->syncfs_wait_list_lock); + + upper = ovl_inode_upper(&oi->vfs_inode); + if (!mapping_tagged(upper->i_mapping, PAGECACHE_TAG_WRITEBACK)) { + iput(&oi->vfs_inode); + goto wait_next; + } + + filemap_fdatawait_keep_errors(upper->i_mapping); + iput(&oi->vfs_inode); + cond_resched(); +wait_next: + spin_lock(&ofs->syncfs_wait_list_lock); + } + spin_unlock(&ofs->syncfs_wait_list_lock); +} + /* Sync real dirty inodes in upper filesystem (if it exists) */ static int ovl_sync_fs(struct super_block *sb, int wait) { From patchwork Sun Nov 8 14:03:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chengguang Xu X-Patchwork-Id: 11889557 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 C3CD117D3 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A7FD4206F4 for ; Sun, 8 Nov 2020 14:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mykernel.net header.i=cgxu519@mykernel.net header.b="R3RISgct" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728451AbgKHOEE (ORCPT ); Sun, 8 Nov 2020 09:04:04 -0500 Received: from sender2-op-o12.zoho.com.cn ([163.53.93.243]:17141 "EHLO sender2-op-o12.zoho.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728311AbgKHOED (ORCPT ); Sun, 8 Nov 2020 09:04:03 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1604844209; cv=none; d=zoho.com.cn; s=zohoarc; b=hJKqz46bMoFQbA7P5d/3iEAagbKCvzYyKET5E1EfgDzw3Wj+UQbOz6JnKHvGNI5U485jWdiYiBd1Z9IMi9ecRN+k0n6l5esOI77axTroCeBX1I0ZZSenFXj0ycf0xnjf54GQg1SqgiZcXVvshzHL2cJSgsoGPSNYGTpQ1pgqlBo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com.cn; s=zohoarc; t=1604844209; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=nE9/U4FdhP2QCkpJbWwcZagtZcr1H04OMCjjI97w8Tg=; b=YPZ/kKk+uVXNro0vMx/K45J750HJmU7m9xbo0Pv4F7sPRoMcvg1kWS8VWcThnzN8T+Z95leHotTTS+eY+I+mKoFe/gfZbIK3cHAM0WGpwhM/RAQ6RczfgSdNK916tA1TIqjtLT9bn0QFVHFl1NnV+B+vexJbbZmQvwJuql17clk= 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=1604844209; 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=nE9/U4FdhP2QCkpJbWwcZagtZcr1H04OMCjjI97w8Tg=; b=R3RISgcta+xHROvHE+2Q3AYNdXgnQKiQud5Ink6JfZ/d+PMS4wh6AE7EQNhjAGaV fBY1NkGpIb12pihelhNZ5swQDvKy4So5R9jQPJJmak4PvcZwKCcqmK40hp8Ut1lUvAi GpSaCNf1q6/scGMjQwebQQv13FvRSgiMLoiA1xCk= Received: from localhost.localdomain (113.116.49.189 [113.116.49.189]) by mx.zoho.com.cn with SMTPS id 1604844208180826.6251706207471; Sun, 8 Nov 2020 22:03:28 +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: <20201108140307.1385745-11-cgxu519@mykernel.net> Subject: [RFC PATCH v3 10/10] ovl: implement containerized syncfs for overlayfs Date: Sun, 8 Nov 2020 22:03:07 +0800 X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201108140307.1385745-1-cgxu519@mykernel.net> References: <20201108140307.1385745-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 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 9a535fc11221..9fc66563d749 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "overlayfs.h" MODULE_AUTHOR("Miklos Szeredi "); @@ -301,8 +302,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) @@ -311,7 +311,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); + ovl_wait_wb_inodes(ofs); + 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;