Re: [PATCH v3 1/2] fuse: reflect cached blocksize if blocksize was changed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 18 Aug 2025 at 10:32, Chunsheng Luo <luochunsheng@xxxxxxxx> wrote:
>
> On Fri, 15 Aug 2025 11:25:38 Joanne Koong wrote:
> >diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
> >index ec248d13c8bf..1647eb7ca6fa 100644
> >--- a/fs/fuse/fuse_i.h
> >+++ b/fs/fuse/fuse_i.h
> >@@ -210,6 +210,12 @@ struct fuse_inode {
> >        /** Reference to backing file in passthrough mode */
> >        struct fuse_backing *fb;
> > #endif
> >+
> >+       /*
> >+        * The underlying inode->i_blkbits value will not be modified,
> >+        * so preserve the blocksize specified by the server.
> >+        */
> >+       u8 cached_i_blkbits;
> > };
>
> Does the `cached_i_blkbits` member also need to be initialized in the
> `fuse_alloc_inode` function like `orig_ino`?
>
> And I am also confused, why does `orig_ino` need to be initialized in
> `fuse_alloc_inode`, but the `orig_i_mode` member does not need it?

Strictly speaking neither one needs initialization, since these
shouldn't be accessed until the in-core inode is set up in lookup or
create.

But having random values in there is not nice, so I prefer having
everything initialized in fuse_alloc_inode().  See patch below
(whitespace damage(TM) by gmail).

Thanks,
Miklos

diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index 19fc58cb84dc..9d26a5bc394d 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -101,14 +101,11 @@ static struct inode *fuse_alloc_inode(struct
super_block *sb)
        if (!fi)
                return NULL;

-       fi->i_time = 0;
+       /* Initialize private data (i.e. everything except fi->inode) */
+       BUILD_BUG_ON(offsetof(struct fuse_inode, inode) != 0);
+       memset((void *) fi + sizeof(fi->inode), 0, sizeof(*fi) -
sizeof(fi->inode));
+
        fi->inval_mask = ~0;
-       fi->nodeid = 0;
-       fi->nlookup = 0;
-       fi->attr_version = 0;
-       fi->orig_ino = 0;
-       fi->state = 0;
-       fi->submount_lookup = NULL;
        mutex_init(&fi->mutex);
        spin_lock_init(&fi->lock);
        fi->forget = fuse_alloc_forget();




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux