From patchwork Tue May 29 14:43:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miklos Szeredi X-Patchwork-Id: 10436071 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 73D49601C7 for ; Tue, 29 May 2018 15:10:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 660C728856 for ; Tue, 29 May 2018 15:10:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 639B828859; Tue, 29 May 2018 15:10:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 060CB28803 for ; Tue, 29 May 2018 15:10:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935211AbeE2PJD (ORCPT ); Tue, 29 May 2018 11:09:03 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:53957 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935842AbeE2OoY (ORCPT ); Tue, 29 May 2018 10:44:24 -0400 Received: by mail-wm0-f66.google.com with SMTP id a67-v6so41195778wmf.3 for ; Tue, 29 May 2018 07:44:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jCFws2rqQUxrKvMPMCA7+czJRQs1dTwvOC8R0dotg1o=; b=qGoyrxevOKNG8of11KB6qJsGZi0iGZM7K6suzQ+zBZl572Q2cf/hqaPZqBq/efM2eo iqJMR+UpEGvffyxNZ/a+pUCi37fUpSjb/lBjphRBIoPsUgdKBKHYw+YtyZ3+Snydrsao PRwloT7CFwIiHSGu1eT53Ky/4abZc41L4bXISrQKOTEsMMMBkeLzdGYPjq/UgYOY2djK UTtNsrMDHlexQ1rTf7C/kbj51I1jje2kcFqSrsUJrERlBy4/fdZUOFfQ0CPkOVopiAW2 gxvo4voL1jN3rMfI0GvMbQdqtIw5wk0wGBIvwMpE9PAo2A9Ry5d/qknXuhT88Rvcq0Zz +Fpw== X-Gm-Message-State: ALKqPwfTpOQgDxMnnshUPiAgBr9IRJuBe5FdXqQtU2fq9muvW+0JhI8H AndOr5JD1SWzP75YzjvgRFgy7g== X-Google-Smtp-Source: AB8JxZoWd/I1Pi3VJzGFuyf6WBk3nIvJZEaHEFAcPFmQFvrnzELUC87TZE6t/KIzp0VeNA6nogeytA== X-Received: by 2002:a1c:ca:: with SMTP id 193-v6mr10406600wma.99.1527605063373; Tue, 29 May 2018 07:44:23 -0700 (PDT) Received: from veci.piliscsaba.redhat.com (catv-176-63-54-97.catv.broadband.hu. [176.63.54.97]) by smtp.gmail.com with ESMTPSA id t198-v6sm18834422wmt.23.2018.05.29.07.44.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 May 2018 07:44:22 -0700 (PDT) From: Miklos Szeredi To: linux-unionfs@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 34/39] Revert "vfs: update ovl inode before relatime check" Date: Tue, 29 May 2018 16:43:34 +0200 Message-Id: <20180529144339.16538-35-mszeredi@redhat.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180529144339.16538-1-mszeredi@redhat.com> References: <20180529144339.16538-1-mszeredi@redhat.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This reverts commit 598e3c8f72f5b77c84d2cb26cfd936ffb3cfdbaa. Overlayfs no longer relies on the vfs correct atime handling. Signed-off-by: Miklos Szeredi --- fs/inode.c | 33 ++++++--------------------------- fs/internal.h | 7 ------- fs/namei.c | 2 +- include/linux/fs.h | 1 + 4 files changed, 8 insertions(+), 35 deletions(-) diff --git a/fs/inode.c b/fs/inode.c index ad0259bafe2d..348e93f468cc 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -1553,37 +1553,17 @@ sector_t bmap(struct inode *inode, sector_t block) } EXPORT_SYMBOL(bmap); -/* - * Update times in overlayed inode from underlying real inode - */ -static void update_ovl_inode_times(struct dentry *dentry, struct inode *inode, - bool rcu) -{ - if (!rcu) { - struct inode *realinode = d_real_inode(dentry); - - if (unlikely(inode != realinode) && - (!timespec_equal(&inode->i_mtime, &realinode->i_mtime) || - !timespec_equal(&inode->i_ctime, &realinode->i_ctime))) { - inode->i_mtime = realinode->i_mtime; - inode->i_ctime = realinode->i_ctime; - } - } -} - /* * With relative atime, only update atime if the previous atime is * earlier than either the ctime or mtime or if at least a day has * passed since the last atime update. */ -static int relatime_need_update(const struct path *path, struct inode *inode, - struct timespec now, bool rcu) +static int relatime_need_update(struct vfsmount *mnt, struct inode *inode, + struct timespec now) { - if (!(path->mnt->mnt_flags & MNT_RELATIME)) + if (!(mnt->mnt_flags & MNT_RELATIME)) return 1; - - update_ovl_inode_times(path->dentry, inode, rcu); /* * Is mtime younger than atime? If yes, update atime: */ @@ -1654,8 +1634,7 @@ static int update_time(struct inode *inode, struct timespec *time, int flags) * This function automatically handles read only file systems and media, * as well as the "noatime" flag and inode specific "noatime" markers. */ -bool __atime_needs_update(const struct path *path, struct inode *inode, - bool rcu) +bool atime_needs_update(const struct path *path, struct inode *inode) { struct vfsmount *mnt = path->mnt; struct timespec now; @@ -1681,7 +1660,7 @@ bool __atime_needs_update(const struct path *path, struct inode *inode, now = current_time(inode); - if (!relatime_need_update(path, inode, now, rcu)) + if (!relatime_need_update(mnt, inode, now)) return false; if (timespec_equal(&inode->i_atime, &now)) @@ -1696,7 +1675,7 @@ void touch_atime(const struct path *path) struct inode *inode = d_inode(path->dentry); struct timespec now; - if (!__atime_needs_update(path, inode, false)) + if (!atime_needs_update(path, inode)) return; if (!sb_start_write_trylock(inode->i_sb)) diff --git a/fs/internal.h b/fs/internal.h index 29c9a2fab592..6ada1f356da6 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -138,13 +138,6 @@ extern long prune_icache_sb(struct super_block *sb, struct shrink_control *sc); extern void inode_add_lru(struct inode *inode); extern int dentry_needs_remove_privs(struct dentry *dentry); -extern bool __atime_needs_update(const struct path *, struct inode *, bool); -static inline bool atime_needs_update_rcu(const struct path *path, - struct inode *inode) -{ - return __atime_needs_update(path, inode, true); -} - /* * fs-writeback.c */ diff --git a/fs/namei.c b/fs/namei.c index 186bd2464fd5..54ab8ccb8d6d 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1013,7 +1013,7 @@ const char *get_link(struct nameidata *nd) if (!(nd->flags & LOOKUP_RCU)) { touch_atime(&last->link); cond_resched(); - } else if (atime_needs_update_rcu(&last->link, inode)) { + } else if (atime_needs_update(&last->link, inode)) { if (unlikely(unlazy_walk(nd))) return ERR_PTR(-ECHILD); touch_atime(&last->link); diff --git a/include/linux/fs.h b/include/linux/fs.h index 6961feda6915..96a4b9fd1f5f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2066,6 +2066,7 @@ enum file_time_flags { S_VERSION = 8, }; +extern bool atime_needs_update(const struct path *, struct inode *); extern void touch_atime(const struct path *); static inline void file_accessed(struct file *file) {