From: Al Viro <viro@zeniv.linux.org.uk>
To: David Howells <dhowells@redhat.com>
Cc: Marc Dionne <marc.dionne@auristor.com>,
Christian Brauner <christian@brauner.io>,
linux-afs@lists.infradead.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] afs: Make /afs/@cell and /afs/.@cell symlinks
Date: Tue, 7 Jan 2025 15:20:50 +0000 [thread overview]
Message-ID: <20250107152050.GP1977892@ZenIV> (raw)
In-Reply-To: <20250107142513.527300-3-dhowells@redhat.com>
On Tue, Jan 07, 2025 at 02:25:09PM +0000, David Howells wrote:
> @@ -247,9 +285,13 @@ static struct dentry *afs_dynroot_lookup(struct inode *dir, struct dentry *dentr
> return ERR_PTR(-ENAMETOOLONG);
> }
>
> - if (dentry->d_name.len == 5 &&
> - memcmp(dentry->d_name.name, "@cell", 5) == 0)
> - return afs_lookup_atcell(dentry);
> + if (dentry->d_name.len == sizeof(afs_atcell) - 1 &&
> + memcmp(dentry->d_name.name, afs_atcell, sizeof(afs_atcell) - 1) == 0)
> + return afs_lookup_atcell(dentry, false);
> +
> + if (dentry->d_name.len == sizeof(afs_dotatcell) - 1 &&
> + memcmp(dentry->d_name.name, afs_dotatcell, sizeof(afs_dotatcell) - 1) == 0)
> + return afs_lookup_atcell(dentry, true);
Ow... That looks just painful.
> return d_splice_alias(afs_try_auto_mntpt(dentry, dir), dentry);
> }
> @@ -343,6 +385,40 @@ void afs_dynroot_rmdir(struct afs_net *net, struct afs_cell *cell)
> +static int afs_dynroot_symlink(struct afs_net *net)
> +{
> + struct super_block *sb = net->dynroot_sb;
> + struct dentry *root, *symlink, *dsymlink;
> + int ret;
> +
> + /* Let the ->lookup op do the creation */
> + root = sb->s_root;
> + inode_lock(root->d_inode);
> + symlink = lookup_one_len(afs_atcell, root, sizeof(afs_atcell) - 1);
> + if (IS_ERR(symlink)) {
> + ret = PTR_ERR(symlink);
> + goto unlock;
> + }
> +
> + dsymlink = lookup_one_len(afs_dotatcell, root, sizeof(afs_dotatcell) - 1);
> + if (IS_ERR(dsymlink)) {
> + ret = PTR_ERR(dsymlink);
> + dput(symlink);
> + goto unlock;
> + }
Just allocate those child dentries and call your afs_lookup_atcell() for them.
No need to keep that mess in ->lookup() - you are keeping those suckers cached
now, so...
next prev parent reply other threads:[~2025-01-07 15:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-07 14:25 [PATCH 0/2] afs: Dynamic root improvements David Howells
2025-01-07 14:25 ` [PATCH 1/2] afs: Make /afs/.<cell> as well /afs/<cell> mountpoints David Howells
2025-01-07 14:25 ` [PATCH 2/2] afs: Make /afs/@cell and /afs/.@cell symlinks David Howells
2025-01-07 15:20 ` Al Viro [this message]
2025-01-07 15:36 ` David Howells
2025-01-07 17:56 ` David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250107152050.GP1977892@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=christian@brauner.io \
--cc=dhowells@redhat.com \
--cc=linux-afs@lists.infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.dionne@auristor.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox