lkml.org 
[lkml]   [2023]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[RFC PATCH v3 07/37] fuse-bpf: Prepare for fuse-bpf patch
    From
    This moves some functions and structs around to make the following patch
    easier to read.

    Signed-off-by: Daniel Rosenberg <drosen@google.com>
    Signed-off-by: Paul Lawrence <paullawrence@google.com>
    ---
    fs/fuse/dir.c | 30 ------------------------------
    fs/fuse/fuse_i.h | 35 +++++++++++++++++++++++++++++++++++
    fs/fuse/inode.c | 44 ++++++++++++++++++++++----------------------
    3 files changed, 57 insertions(+), 52 deletions(-)

    diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
    index 35bc174f9ba2..55dd6e8b2e43 100644
    --- a/fs/fuse/dir.c
    +++ b/fs/fuse/dir.c
    @@ -46,10 +46,6 @@ static inline u64 fuse_dentry_time(const struct dentry *entry)
    }

    #else
    -union fuse_dentry {
    - u64 time;
    - struct rcu_head rcu;
    -};

    static inline void __fuse_dentry_settime(struct dentry *dentry, u64 time)
    {
    @@ -83,27 +79,6 @@ static void fuse_dentry_settime(struct dentry *dentry, u64 time)
    __fuse_dentry_settime(dentry, time);
    }

    -/*
    - * FUSE caches dentries and attributes with separate timeout. The
    - * time in jiffies until the dentry/attributes are valid is stored in
    - * dentry->d_fsdata and fuse_inode->i_time respectively.
    - */
    -
    -/*
    - * Calculate the time in jiffies until a dentry/attributes are valid
    - */
    -static u64 time_to_jiffies(u64 sec, u32 nsec)
    -{
    - if (sec || nsec) {
    - struct timespec64 ts = {
    - sec,
    - min_t(u32, nsec, NSEC_PER_SEC - 1)
    - };
    -
    - return get_jiffies_64() + timespec64_to_jiffies(&ts);
    - } else
    - return 0;
    -}

    /*
    * Set dentry and possibly attribute timeouts from the lookup/mk*
    @@ -115,11 +90,6 @@ void fuse_change_entry_timeout(struct dentry *entry, struct fuse_entry_out *o)
    time_to_jiffies(o->entry_valid, o->entry_valid_nsec));
    }

    -static u64 attr_timeout(struct fuse_attr_out *o)
    -{
    - return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
    -}
    -
    u64 entry_attr_timeout(struct fuse_entry_out *o)
    {
    return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
    diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
    index 9b7fc7d3c7f1..01ca8bb87b4f 100644
    --- a/fs/fuse/fuse_i.h
    +++ b/fs/fuse/fuse_i.h
    @@ -63,6 +63,14 @@ struct fuse_forget_link {
    struct fuse_forget_link *next;
    };

    +/** FUSE specific dentry data */
    +#if BITS_PER_LONG < 64
    +union fuse_dentry {
    + u64 time;
    + struct rcu_head rcu;
    +};
    +#endif
    +
    /** FUSE inode */
    struct fuse_inode {
    /** Inode data */
    @@ -1324,4 +1332,31 @@ struct fuse_file *fuse_file_open(struct fuse_mount *fm, u64 nodeid,
    void fuse_file_release(struct inode *inode, struct fuse_file *ff,
    unsigned int open_flags, fl_owner_t id, bool isdir);

    +/*
    + * FUSE caches dentries and attributes with separate timeout. The
    + * time in jiffies until the dentry/attributes are valid is stored in
    + * dentry->d_fsdata and fuse_inode->i_time respectively.
    + */
    +
    +/*
    + * Calculate the time in jiffies until a dentry/attributes are valid
    + */
    +static inline u64 time_to_jiffies(u64 sec, u32 nsec)
    +{
    + if (sec || nsec) {
    + struct timespec64 ts = {
    + sec,
    + min_t(u32, nsec, NSEC_PER_SEC - 1)
    + };
    +
    + return get_jiffies_64() + timespec64_to_jiffies(&ts);
    + } else
    + return 0;
    +}
    +
    +static inline u64 attr_timeout(struct fuse_attr_out *o)
    +{
    + return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
    +}
    +
    #endif /* _FS_FUSE_I_H */
    diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
    index d66070af145d..a824ca100047 100644
    --- a/fs/fuse/inode.c
    +++ b/fs/fuse/inode.c
    @@ -162,6 +162,28 @@ static ino_t fuse_squash_ino(u64 ino64)
    return ino;
    }

    +static void fuse_fill_attr_from_inode(struct fuse_attr *attr,
    + const struct fuse_inode *fi)
    +{
    + *attr = (struct fuse_attr){
    + .ino = fi->inode.i_ino,
    + .size = fi->inode.i_size,
    + .blocks = fi->inode.i_blocks,
    + .atime = fi->inode.i_atime.tv_sec,
    + .mtime = fi->inode.i_mtime.tv_sec,
    + .ctime = fi->inode.i_ctime.tv_sec,
    + .atimensec = fi->inode.i_atime.tv_nsec,
    + .mtimensec = fi->inode.i_mtime.tv_nsec,
    + .ctimensec = fi->inode.i_ctime.tv_nsec,
    + .mode = fi->inode.i_mode,
    + .nlink = fi->inode.i_nlink,
    + .uid = fi->inode.i_uid.val,
    + .gid = fi->inode.i_gid.val,
    + .rdev = fi->inode.i_rdev,
    + .blksize = 1u << fi->inode.i_blkbits,
    + };
    +}
    +
    void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
    u64 attr_valid, u32 cache_mask)
    {
    @@ -1394,28 +1416,6 @@ void fuse_dev_free(struct fuse_dev *fud)
    }
    EXPORT_SYMBOL_GPL(fuse_dev_free);

    -static void fuse_fill_attr_from_inode(struct fuse_attr *attr,
    - const struct fuse_inode *fi)
    -{
    - *attr = (struct fuse_attr){
    - .ino = fi->inode.i_ino,
    - .size = fi->inode.i_size,
    - .blocks = fi->inode.i_blocks,
    - .atime = fi->inode.i_atime.tv_sec,
    - .mtime = fi->inode.i_mtime.tv_sec,
    - .ctime = fi->inode.i_ctime.tv_sec,
    - .atimensec = fi->inode.i_atime.tv_nsec,
    - .mtimensec = fi->inode.i_mtime.tv_nsec,
    - .ctimensec = fi->inode.i_ctime.tv_nsec,
    - .mode = fi->inode.i_mode,
    - .nlink = fi->inode.i_nlink,
    - .uid = fi->inode.i_uid.val,
    - .gid = fi->inode.i_gid.val,
    - .rdev = fi->inode.i_rdev,
    - .blksize = 1u << fi->inode.i_blkbits,
    - };
    -}
    -
    static void fuse_sb_defaults(struct super_block *sb)
    {
    sb->s_magic = FUSE_SUPER_MAGIC;
    --
    2.40.0.634.g4ca3ef3211-goog
    \
     
     \ /
      Last update: 2023-04-18 03:41    [W:2.403 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site