Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp3084199pxb; Mon, 18 Oct 2021 07:57:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzPtMOAJM/LkGioTXdqAQZ6GJit+kEnxdDGkHbXuKl5r/8g8XfJQb41qnWP7pYusZZjiEL2 X-Received: by 2002:a05:6402:34d2:: with SMTP id w18mr44718799edc.172.1634569060886; Mon, 18 Oct 2021 07:57:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634569060; cv=none; d=google.com; s=arc-20160816; b=FzActg/scRP62Dnn0wKP6eDzftNjSpbqsB3AhLRxG9FJZM/+THmSJU6eswEmvDHy5E O+lhttH9ZzAf9VnElvrzlP1zOEO9jkQfJR8XjUyLuwBeuIgEIlIzmPjFuwB0Xh5FeG/i +No5k3VkYDDjqL9qQB9U7WGblt3T0Sm3un9SDTryRbGdVnd/XGJMWncEjn7RXrdbR10j 8QQtpjhKIf++Vd1UdS5qgf4K4sT+dKUIJm6OWvm2Whi3xJJOrSkpZIiAtqnp9R7cZmJl 8rtBARF7wkGOaiPvvIlYPpm72sIf6MXhOY1PhpjH2AjxOl5SS+f5A+onrh1LZ6nSMLuy nzaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:organization:dkim-signature; bh=gffoLzvDPsOEDMd/EdqBWrUIkxMzdS8M/lUepfNC0Jw=; b=xtB9OLs8qDJrwVXxVeuJ/CeZncN0yQ3bZfj8Codo2vBzRt1YPLL9PoqrnWZ7WQd/ky nyDpGtZ8/IcrGOCcJhbIlHOG4Cx0/8JN9DNcP4DC3nVPIqzr/ILhAduRLWYNDASK9tdI MW/QjiEOrC3vic67KHb8wUh14VmcwIGjIx9pXPz2JAuT7QvusgxHD2QL8AJbWVI0ngmE Azd2mMKUHAmrWTi/qmW9bxOG0jjTtdHLTtHuTCR+qokxjgqpmHAFhHtxnSviXA5zGAij nQm7ewAjfU692ct1LdlIIGLt6GGLrk0d+WTuXmxNuNfvhH+s09mW1aVe/Iv7LN5JU1W0 nw4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fc0EXUSy; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l8si11223453edi.356.2021.10.18.07.57.17; Mon, 18 Oct 2021 07:57:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fc0EXUSy; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232934AbhJRO7Z (ORCPT + 99 others); Mon, 18 Oct 2021 10:59:25 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:46936 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232743AbhJRO7R (ORCPT ); Mon, 18 Oct 2021 10:59:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634569026; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gffoLzvDPsOEDMd/EdqBWrUIkxMzdS8M/lUepfNC0Jw=; b=fc0EXUSy8LrG4i8i6OpucfU7mo4aU30M6YK+o1lLd66dGP/LIrwRScR+Vcmx00dUc9QV3V 1mTGgDffbS+tWDmN4ptd0IcdyMuenmPyycM1N7vw/wFQbj29topVTWIIz8oBdn/sgfznFu cJkURkeI2Rz7mZPuRLw8GUdfexuyVZ0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-330-6D7N4RWvOOGQNU4snc2u8A-1; Mon, 18 Oct 2021 10:57:00 -0400 X-MC-Unique: 6D7N4RWvOOGQNU4snc2u8A-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D40611006AA4; Mon, 18 Oct 2021 14:56:58 +0000 (UTC) Received: from warthog.procyon.org.uk (unknown [10.33.36.19]) by smtp.corp.redhat.com (Postfix) with ESMTP id A39C3100E809; Mon, 18 Oct 2021 14:56:55 +0000 (UTC) Organization: Red Hat UK Ltd. Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 3798903 Subject: [PATCH 24/67] cachefiles: Remove separate backer dentry from cachefiles_object From: David Howells To: linux-cachefs@redhat.com Cc: dhowells@redhat.com, Trond Myklebust , Anna Schumaker , Steve French , Dominique Martinet , Jeff Layton , Matthew Wilcox , Alexander Viro , Omar Sandoval , Linus Torvalds , linux-afs@lists.infradead.org, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs-developer@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Date: Mon, 18 Oct 2021 15:56:54 +0100 Message-ID: <163456901488.2614702.3877237088238450861.stgit@warthog.procyon.org.uk> In-Reply-To: <163456861570.2614702.14754548462706508617.stgit@warthog.procyon.org.uk> References: <163456861570.2614702.14754548462706508617.stgit@warthog.procyon.org.uk> User-Agent: StGit/0.23 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org The cachefiles_object struct has two dentry pointers - one for the file/directory representing the object and a second one in case a data object is a directory with a file inside of it that contains the data (the idea being that there might be another file, say, containing a journal of local changes that need committing or a list of cached xattrs). At the moment, this isn't implemented, so remove it and always use the main dentry pointer. Signed-off-by: David Howells --- fs/cachefiles/bind.c | 2 -- fs/cachefiles/interface.c | 28 +++++++++------------------- fs/cachefiles/internal.h | 1 - fs/cachefiles/io.c | 4 ++-- fs/cachefiles/namei.c | 1 - 5 files changed, 11 insertions(+), 25 deletions(-) diff --git a/fs/cachefiles/bind.c b/fs/cachefiles/bind.c index fbc8577477c1..cb3296814056 100644 --- a/fs/cachefiles/bind.c +++ b/fs/cachefiles/bind.c @@ -101,8 +101,6 @@ static int cachefiles_daemon_add_cache(struct cachefiles_cache *cache) if (!fsdef) goto error_root_object; - ASSERTCMP(fsdef->backer, ==, NULL); - atomic_set(&fsdef->usage, 1); fsdef->type = FSCACHE_COOKIE_TYPE_INDEX; diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c index 2083aca6bd0c..92bb3ba78c41 100644 --- a/fs/cachefiles/interface.c +++ b/fs/cachefiles/interface.c @@ -31,8 +31,6 @@ static struct fscache_object *cachefiles_alloc_object( if (!object) goto nomem_object; - ASSERTCMP(object->backer, ==, NULL); - atomic_set(&object->usage, 1); fscache_object_init(&object->fscache, cookie, &cache->cache); @@ -191,10 +189,6 @@ static void cachefiles_drop_object(struct fscache_object *_object) } /* close the filesystem stuff attached to the object */ - if (object->backer != object->dentry) - dput(object->backer); - object->backer = NULL; - cachefiles_unmark_inode_in_use(object); dput(object->dentry); object->dentry = NULL; @@ -235,7 +229,6 @@ void cachefiles_put_object(struct fscache_object *_object, _debug("- kill object OBJ%x", object->fscache.debug_id); ASSERTCMP(object->fscache.parent, ==, NULL); - ASSERTCMP(object->backer, ==, NULL); ASSERTCMP(object->dentry, ==, NULL); ASSERTCMP(object->fscache.n_ops, ==, 0); ASSERTCMP(object->fscache.n_children, ==, 0); @@ -303,17 +296,14 @@ static int cachefiles_attr_changed(struct cachefiles_object *object) if (ni_size == object->i_size) return 0; - if (!object->backer) - return -ENOBUFS; + ASSERT(d_is_reg(object->dentry)); - ASSERT(d_is_reg(object->backer)); - - oi_size = i_size_read(d_backing_inode(object->backer)); + oi_size = i_size_read(d_backing_inode(object->dentry)); if (oi_size == ni_size) return 0; cachefiles_begin_secure(cache, &saved_cred); - inode_lock(d_inode(object->backer)); + inode_lock(d_inode(object->dentry)); /* if there's an extension to a partial page at the end of the backing * file, we need to discard the partial page so that we pick up new @@ -322,17 +312,17 @@ static int cachefiles_attr_changed(struct cachefiles_object *object) _debug("discard tail %llx", oi_size); newattrs.ia_valid = ATTR_SIZE; newattrs.ia_size = oi_size & PAGE_MASK; - ret = notify_change(&init_user_ns, object->backer, &newattrs, NULL); + ret = notify_change(&init_user_ns, object->dentry, &newattrs, NULL); if (ret < 0) goto truncate_failed; } newattrs.ia_valid = ATTR_SIZE; newattrs.ia_size = ni_size; - ret = notify_change(&init_user_ns, object->backer, &newattrs, NULL); + ret = notify_change(&init_user_ns, object->dentry, &newattrs, NULL); truncate_failed: - inode_unlock(d_inode(object->backer)); + inode_unlock(d_inode(object->dentry)); cachefiles_end_secure(cache, saved_cred); if (ret == -EIO) { @@ -365,10 +355,10 @@ static void cachefiles_invalidate_object(struct fscache_object *_object) _enter("{OBJ%x},[%llu]", object->fscache.debug_id, (unsigned long long)ni_size); - if (object->backer) { - ASSERT(d_is_reg(object->backer)); + if (object->dentry) { + ASSERT(d_is_reg(object->dentry)); - path.dentry = object->backer; + path.dentry = object->dentry; path.mnt = cache->mnt; cachefiles_begin_secure(cache, &saved_cred); diff --git a/fs/cachefiles/internal.h b/fs/cachefiles/internal.h index 83911cf24769..9f2f837027e0 100644 --- a/fs/cachefiles/internal.h +++ b/fs/cachefiles/internal.h @@ -36,7 +36,6 @@ struct cachefiles_object { struct fscache_object fscache; /* fscache handle */ char *d_name; /* Filename */ struct dentry *dentry; /* the file/dir representing this object */ - struct dentry *backer; /* backing file */ loff_t i_size; /* object size */ atomic_t usage; /* object usage count */ uint8_t type; /* object type */ diff --git a/fs/cachefiles/io.c b/fs/cachefiles/io.c index 534c81a05918..920ca48eecfa 100644 --- a/fs/cachefiles/io.c +++ b/fs/cachefiles/io.c @@ -426,9 +426,9 @@ int cachefiles_begin_operation(struct netfs_cache_resources *cres) struct cachefiles_cache, cache); path.mnt = cache->mnt; - path.dentry = object->backer; + path.dentry = object->dentry; file = open_with_fake_path(&path, O_RDWR | O_LARGEFILE | O_DIRECT, - d_inode(object->backer), cache->cache_cred); + d_inode(object->dentry), cache->cache_cred); if (IS_ERR(file)) return PTR_ERR(file); if (!S_ISREG(file_inode(file)->i_mode)) diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c index b5a0aec529af..7f02fcb34b1e 100644 --- a/fs/cachefiles/namei.c +++ b/fs/cachefiles/namei.c @@ -459,7 +459,6 @@ int cachefiles_walk_to_object(struct cachefiles_object *parent, if (ret < 0) goto check_error; - object->backer = object->dentry; object->new = false; fscache_obtained_object(&object->fscache); _leave(" = 0 [%lu]", d_backing_inode(object->dentry)->i_ino);