nit: the commit title refers to ceph_open() but the code changes are pertaining to ceph_lookup() Otherwise it looks good to me. Reviewed-by: Milind Changire <mchangir@xxxxxxxxxx> On Mon, Apr 17, 2023 at 9:03 AM <xiubli@xxxxxxxxxx> wrote: > > From: Luís Henriques <lhenriques@xxxxxxx> > > Instead of setting the no-key dentry in ceph_lookup(), use the new > fscrypt_prepare_lookup_partial() helper. We still need to mark the > directory as incomplete if the directory was just unlocked. > > Tested-by: Luís Henriques <lhenriques@xxxxxxx> > Tested-by: Venky Shankar <vshankar@xxxxxxxxxx> > Signed-off-by: Luís Henriques <lhenriques@xxxxxxx> > Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx> > --- > fs/ceph/dir.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c > index fe48a5d26c1d..c28de23e12a1 100644 > --- a/fs/ceph/dir.c > +++ b/fs/ceph/dir.c > @@ -784,14 +784,15 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry, > return ERR_PTR(-ENAMETOOLONG); > > if (IS_ENCRYPTED(dir)) { > - err = ceph_fscrypt_prepare_readdir(dir); > + bool had_key = fscrypt_has_encryption_key(dir); > + > + err = fscrypt_prepare_lookup_partial(dir, dentry); > if (err < 0) > return ERR_PTR(err); > - if (!fscrypt_has_encryption_key(dir)) { > - spin_lock(&dentry->d_lock); > - dentry->d_flags |= DCACHE_NOKEY_NAME; > - spin_unlock(&dentry->d_lock); > - } > + > + /* mark directory as incomplete if it has been unlocked */ > + if (!had_key && fscrypt_has_encryption_key(dir)) > + ceph_dir_clear_complete(dir); > } > > /* can we conclude ENOENT locally? */ > -- > 2.39.1 > -- Milind