On December 3, 2021 1:21:15 PM GMT-03:00, Jeff Layton <jlayton@xxxxxxxxxx> wrote: >On Fri, 2021-12-03 at 14:52 +0530, Shyam Prasad N wrote: >> The logic for initializing tcon->resource_id is done inside >> cifs_root_iget. fscache super cookie relies on this for aux >> data. So we need to push the fscache initialization to this >> later point during mount. >> >> Signed-off-by: Shyam Prasad N <sprasad@xxxxxxxxxxxxx> >> --- >> fs/cifs/connect.c | 6 ------ >> fs/cifs/fscache.c | 2 +- >> fs/cifs/inode.c | 7 +++++++ >> 3 files changed, 8 insertions(+), 7 deletions(-) >> >> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c >> index 6b705026da1a3..eee994b0925ff 100644 >> --- a/fs/cifs/connect.c >> +++ b/fs/cifs/connect.c >> @@ -3046,12 +3046,6 @@ static int mount_get_conns(struct mount_ctx *mnt_ctx) >> cifs_dbg(VFS, "read only mount of RW share\n"); >> /* no need to log a RW mount of a typical RW share */ >> } >> - /* >> - * The cookie is initialized from volume info returned above. >> - * Inside cifs_fscache_get_super_cookie it checks >> - * that we do not get super cookie twice. >> - */ >> - cifs_fscache_get_super_cookie(tcon); >> } >> >> /* >> diff --git a/fs/cifs/fscache.c b/fs/cifs/fscache.c >> index 7e409a38a2d7c..f4da693760c11 100644 >> --- a/fs/cifs/fscache.c >> +++ b/fs/cifs/fscache.c >> @@ -92,7 +92,7 @@ void cifs_fscache_get_super_cookie(struct cifs_tcon *tcon) >> * In the future, as we integrate with newer fscache features, >> * we may want to instead add a check if cookie has changed >> */ >> - if (tcon->fscache == NULL) >> + if (tcon->fscache) >> return; >> > >Ouch! Does the above mean that fscache on cifs is just plain broken at >the moment? If this is the routine that sets the tcon cookie, then it >looks like it just never gets set? Dont much know about fscache, but remember that multiple mounts can share a single tcon (if not using nosharesock). So, if we find an existing tcon and we have a cookie for it already, the check makes sense. > >> sharename = extract_sharename(tcon->treeName); >> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c >> index 82848412ad852..96d083db17372 100644 >> --- a/fs/cifs/inode.c >> +++ b/fs/cifs/inode.c >> @@ -1376,6 +1376,13 @@ struct inode *cifs_root_iget(struct super_block *sb) >> inode = ERR_PTR(rc); >> } >> >> + /* >> + * The cookie is initialized from volume info returned above. >> + * Inside cifs_fscache_get_super_cookie it checks >> + * that we do not get super cookie twice. >> + */ >> + cifs_fscache_get_super_cookie(tcon); >> + >> out: >> kfree(path); >> free_xid(xid); >> > -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/linux-cachefs