All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Amir Goldstein <amir73il@gmail.com>
Cc: tytso@mit.edu, linux-ext4@vger.kernel.org
Subject: Re: [PATCH 04/23] fuse4fs: namespace some helpers
Date: Fri, 7 Nov 2025 16:25:42 -0800	[thread overview]
Message-ID: <20251108002542.GN196391@frogsfrogsfrogs> (raw)
In-Reply-To: <aQ2pVgns-GwNFnW6@amir-ThinkPad-T480>

On Fri, Nov 07, 2025 at 09:09:58AM +0100, Amir Goldstein wrote:
> On Thu, Nov 06, 2025 at 02:44:07PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> > 
> > Prepend "fuse4fs_" to all helper functions that take a struct fuse4fs
> > object pointer.
> > 
> > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > ---
> >  fuse4fs/fuse4fs.c |  177 +++++++++++++++++++++++++++--------------------------
> >  1 file changed, 90 insertions(+), 87 deletions(-)
> > 
> > 
> > diff --git a/fuse4fs/fuse4fs.c b/fuse4fs/fuse4fs.c
> > index daf22e0fe7fde5..2ef5ad60163639 100644
> > --- a/fuse4fs/fuse4fs.c
> > +++ b/fuse4fs/fuse4fs.c
> > @@ -2,6 +2,7 @@
> >   * fuse4fs.c - FUSE low-level server for e2fsprogs.
> >   *
> >   * Copyright (C) 2014-2025 Oracle.
> > + * Copyright (C) 2025 CTERA Networks.
> 
> I think this belongs to next patch :)

Moved; thanks for the feedback!

--D

> Thanks,
> Amir.
> 
> >   *
> >   * %Begin-Header%
> >   * This file may be redistributed under the terms of the GNU Public
> > @@ -852,7 +853,7 @@ static int ext2_file_type(unsigned int mode)
> >  	return 0;
> >  }
> >  
> > -static int fs_can_allocate(struct fuse4fs *ff, blk64_t num)
> > +static int fuse4fs_can_allocate(struct fuse4fs *ff, blk64_t num)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	blk64_t reserved;
> > @@ -879,21 +880,22 @@ static int fs_can_allocate(struct fuse4fs *ff, blk64_t num)
> >  	return ext2fs_free_blocks_count(fs->super) > reserved + num;
> >  }
> >  
> > -static int fuse4fs_is_writeable(struct fuse4fs *ff)
> > +static int fuse4fs_is_writeable(const struct fuse4fs *ff)
> >  {
> >  	return ff->opstate == F4OP_WRITABLE &&
> >  		(ff->fs->super->s_error_count == 0);
> >  }
> >  
> > -static inline int is_superuser(struct fuse4fs *ff, struct fuse_context *ctxt)
> > +static inline int fuse4fs_is_superuser(struct fuse4fs *ff,
> > +				       const struct fuse_context *ctxt)
> >  {
> >  	if (ff->fakeroot)
> >  		return 1;
> >  	return ctxt->uid == 0;
> >  }
> >  
> > -static inline int want_check_owner(struct fuse4fs *ff,
> > -				   struct fuse_context *ctxt)
> > +static inline int fuse4fs_want_check_owner(struct fuse4fs *ff,
> > +					   const struct fuse_context *ctxt)
> >  {
> >  	/*
> >  	 * The kernel is responsible for access control, so we allow anything
> > @@ -901,14 +903,14 @@ static inline int want_check_owner(struct fuse4fs *ff,
> >  	 */
> >  	if (ff->kernel)
> >  		return 0;
> > -	return !is_superuser(ff, ctxt);
> > +	return !fuse4fs_is_superuser(ff, ctxt);
> >  }
> >  
> >  /* Test for append permission */
> >  #define A_OK	16
> >  
> > -static int check_iflags_access(struct fuse4fs *ff, ext2_ino_t ino,
> > -			       const struct ext2_inode *inode, int mask)
> > +static int fuse4fs_iflags_access(struct fuse4fs *ff, ext2_ino_t ino,
> > +				 const struct ext2_inode *inode, int mask)
> >  {
> >  	EXT2FS_BUILD_BUG_ON((A_OK & (R_OK | W_OK | X_OK | F_OK)) != 0);
> >  
> > @@ -936,7 +938,7 @@ static int check_iflags_access(struct fuse4fs *ff, ext2_ino_t ino,
> >  	return 0;
> >  }
> >  
> > -static int check_inum_access(struct fuse4fs *ff, ext2_ino_t ino, int mask)
> > +static int fuse4fs_inum_access(struct fuse4fs *ff, ext2_ino_t ino, int mask)
> >  {
> >  	struct fuse_context *ctxt = fuse_get_context();
> >  	ext2_filsys fs = ff->fs;
> > @@ -968,7 +970,7 @@ static int check_inum_access(struct fuse4fs *ff, ext2_ino_t ino, int mask)
> >  	if (mask == 0)
> >  		return 0;
> >  
> > -	ret = check_iflags_access(ff, ino, &inode, mask);
> > +	ret = fuse4fs_iflags_access(ff, ino, &inode, mask);
> >  	if (ret)
> >  		return ret;
> >  
> > @@ -977,7 +979,7 @@ static int check_inum_access(struct fuse4fs *ff, ext2_ino_t ino, int mask)
> >  		return 0;
> >  
> >  	/* Figure out what root's allowed to do */
> > -	if (is_superuser(ff, ctxt)) {
> > +	if (fuse4fs_is_superuser(ff, ctxt)) {
> >  		/* Non-file access always ok */
> >  		if (!LINUX_S_ISREG(inode.i_mode))
> >  			return 0;
> > @@ -1783,8 +1785,8 @@ static int op_readlink(const char *path, char *buf, size_t len)
> >  	return ret;
> >  }
> >  
> > -static int __getxattr(struct fuse4fs *ff, ext2_ino_t ino, const char *name,
> > -		      void **value, size_t *value_len)
> > +static int fuse4fs_getxattr(struct fuse4fs *ff, ext2_ino_t ino,
> > +			    const char *name, void **value, size_t *value_len)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	struct ext2_xattr_handle *h;
> > @@ -1814,8 +1816,8 @@ static int __getxattr(struct fuse4fs *ff, ext2_ino_t ino, const char *name,
> >  	return ret;
> >  }
> >  
> > -static int __setxattr(struct fuse4fs *ff, ext2_ino_t ino, const char *name,
> > -		      void *value, size_t valuelen)
> > +static int fuse4fs_setxattr(struct fuse4fs *ff, ext2_ino_t ino,
> > +			    const char *name, void *value, size_t valuelen)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	struct ext2_xattr_handle *h;
> > @@ -1845,8 +1847,8 @@ static int __setxattr(struct fuse4fs *ff, ext2_ino_t ino, const char *name,
> >  	return ret;
> >  }
> >  
> > -static int propagate_default_acls(struct fuse4fs *ff, ext2_ino_t parent,
> > -				  ext2_ino_t child, mode_t mode)
> > +static int fuse4fs_propagate_default_acls(struct fuse4fs *ff, ext2_ino_t parent,
> > +					  ext2_ino_t child, mode_t mode)
> >  {
> >  	void *def;
> >  	size_t deflen;
> > @@ -1855,8 +1857,8 @@ static int propagate_default_acls(struct fuse4fs *ff, ext2_ino_t parent,
> >  	if (!ff->acl || S_ISDIR(mode))
> >  		return 0;
> >  
> > -	ret = __getxattr(ff, parent, XATTR_NAME_POSIX_ACL_DEFAULT, &def,
> > -			 &deflen);
> > +	ret = fuse4fs_getxattr(ff, parent, XATTR_NAME_POSIX_ACL_DEFAULT, &def,
> > +			       &deflen);
> >  	switch (ret) {
> >  	case -ENODATA:
> >  	case -ENOENT:
> > @@ -1868,7 +1870,8 @@ static int propagate_default_acls(struct fuse4fs *ff, ext2_ino_t parent,
> >  		return ret;
> >  	}
> >  
> > -	ret = __setxattr(ff, child, XATTR_NAME_POSIX_ACL_DEFAULT, def, deflen);
> > +	ret = fuse4fs_setxattr(ff, child, XATTR_NAME_POSIX_ACL_DEFAULT, def,
> > +			       deflen);
> >  	ext2fs_free_mem(&def);
> >  	return ret;
> >  }
> > @@ -1997,7 +2000,7 @@ static int op_mknod(const char *path, mode_t mode, dev_t dev)
> >  	*node_name = 0;
> >  
> >  	fs = fuse4fs_start(ff);
> > -	if (!fs_can_allocate(ff, 2)) {
> > +	if (!fuse4fs_can_allocate(ff, 2)) {
> >  		ret = -ENOSPC;
> >  		goto out2;
> >  	}
> > @@ -2009,7 +2012,7 @@ static int op_mknod(const char *path, mode_t mode, dev_t dev)
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, parent, A_OK | W_OK);
> > +	ret = fuse4fs_inum_access(ff, parent, A_OK | W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -2079,7 +2082,7 @@ static int op_mknod(const char *path, mode_t mode, dev_t dev)
> >  
> >  	ext2fs_inode_alloc_stats2(fs, child, 1, 0);
> >  
> > -	ret = propagate_default_acls(ff, parent, child, inode.i_mode);
> > +	ret = fuse4fs_propagate_default_acls(ff, parent, child, inode.i_mode);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -2127,7 +2130,7 @@ static int op_mkdir(const char *path, mode_t mode)
> >  	*node_name = 0;
> >  
> >  	fs = fuse4fs_start(ff);
> > -	if (!fs_can_allocate(ff, 1)) {
> > +	if (!fuse4fs_can_allocate(ff, 1)) {
> >  		ret = -ENOSPC;
> >  		goto out2;
> >  	}
> > @@ -2139,7 +2142,7 @@ static int op_mkdir(const char *path, mode_t mode)
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, parent, A_OK | W_OK);
> > +	ret = fuse4fs_inum_access(ff, parent, A_OK | W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -2212,7 +2215,7 @@ static int op_mkdir(const char *path, mode_t mode)
> >  		goto out3;
> >  	}
> >  
> > -	ret = propagate_default_acls(ff, parent, child, inode.i_mode);
> > +	ret = fuse4fs_propagate_default_acls(ff, parent, child, inode.i_mode);
> >  	if (ret)
> >  		goto out3;
> >  
> > @@ -2253,7 +2256,7 @@ static int fuse4fs_unlink(struct fuse4fs *ff, const char *path,
> >  		base_name = filename;
> >  	}
> >  
> > -	ret = check_inum_access(ff, dir, W_OK);
> > +	ret = fuse4fs_inum_access(ff, dir, W_OK);
> >  	if (ret) {
> >  		free(filename);
> >  		return ret;
> > @@ -2275,8 +2278,8 @@ static int fuse4fs_unlink(struct fuse4fs *ff, const char *path,
> >  	return 0;
> >  }
> >  
> > -static int remove_ea_inodes(struct fuse4fs *ff, ext2_ino_t ino,
> > -			    struct ext2_inode_large *inode)
> > +static int fuse4fs_remove_ea_inodes(struct fuse4fs *ff, ext2_ino_t ino,
> > +				    struct ext2_inode_large *inode)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	struct ext2_xattr_handle *h;
> > @@ -2320,7 +2323,7 @@ static int remove_ea_inodes(struct fuse4fs *ff, ext2_ino_t ino,
> >  	return 0;
> >  }
> >  
> > -static int remove_inode(struct fuse4fs *ff, ext2_ino_t ino)
> > +static int fuse4fs_remove_inode(struct fuse4fs *ff, ext2_ino_t ino)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	errcode_t err;
> > @@ -2366,7 +2369,7 @@ static int remove_inode(struct fuse4fs *ff, ext2_ino_t ino)
> >  		goto write_out;
> >  
> >  	if (ext2fs_has_feature_ea_inode(fs->super)) {
> > -		ret = remove_ea_inodes(ff, ino, &inode);
> > +		ret = fuse4fs_remove_ea_inodes(ff, ino, &inode);
> >  		if (ret)
> >  			return ret;
> >  	}
> > @@ -2407,7 +2410,7 @@ static int __op_unlink(struct fuse4fs *ff, const char *path)
> >  		goto out;
> >  	}
> >  
> > -	ret = check_inum_access(ff, ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, ino, W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -2415,7 +2418,7 @@ static int __op_unlink(struct fuse4fs *ff, const char *path)
> >  	if (ret)
> >  		goto out;
> >  
> > -	ret = remove_inode(ff, ino);
> > +	ret = fuse4fs_remove_inode(ff, ino);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -2483,7 +2486,7 @@ static int __op_rmdir(struct fuse4fs *ff, const char *path)
> >  	}
> >  	dbg_printf(ff, "%s: rmdir path=%s ino=%d\n", __func__, path, child);
> >  
> > -	ret = check_inum_access(ff, child, W_OK);
> > +	ret = fuse4fs_inum_access(ff, child, W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -2502,7 +2505,7 @@ static int __op_rmdir(struct fuse4fs *ff, const char *path)
> >  		goto out;
> >  	}
> >  
> > -	ret = check_inum_access(ff, rds.parent, W_OK);
> > +	ret = fuse4fs_inum_access(ff, rds.parent, W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -2514,7 +2517,7 @@ static int __op_rmdir(struct fuse4fs *ff, const char *path)
> >  	ret = fuse4fs_unlink(ff, path, &parent);
> >  	if (ret)
> >  		goto out;
> > -	ret = remove_inode(ff, child);
> > +	ret = fuse4fs_remove_inode(ff, child);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -2587,7 +2590,7 @@ static int op_symlink(const char *src, const char *dest)
> >  	*node_name = 0;
> >  
> >  	fs = fuse4fs_start(ff);
> > -	if (!fs_can_allocate(ff, 1)) {
> > +	if (!fuse4fs_can_allocate(ff, 1)) {
> >  		ret = -ENOSPC;
> >  		goto out2;
> >  	}
> > @@ -2599,7 +2602,7 @@ static int op_symlink(const char *src, const char *dest)
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, parent, A_OK | W_OK);
> > +	ret = fuse4fs_inum_access(ff, parent, A_OK | W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -2746,7 +2749,7 @@ static int op_rename(const char *from, const char *to,
> >  	FUSE4FS_CHECK_CONTEXT(ff);
> >  	dbg_printf(ff, "%s: renaming %s to %s\n", __func__, from, to);
> >  	fs = fuse4fs_start(ff);
> > -	if (!fs_can_allocate(ff, 5)) {
> > +	if (!fuse4fs_can_allocate(ff, 5)) {
> >  		ret = -ENOSPC;
> >  		goto out;
> >  	}
> > @@ -2772,12 +2775,12 @@ static int op_rename(const char *from, const char *to,
> >  		goto out;
> >  	}
> >  
> > -	ret = check_inum_access(ff, from_ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, from_ino, W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> >  	if (to_ino) {
> > -		ret = check_inum_access(ff, to_ino, W_OK);
> > +		ret = fuse4fs_inum_access(ff, to_ino, W_OK);
> >  		if (ret)
> >  			goto out;
> >  	}
> > @@ -2815,7 +2818,7 @@ static int op_rename(const char *from, const char *to,
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, from_dir_ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, from_dir_ino, W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -2840,7 +2843,7 @@ static int op_rename(const char *from, const char *to,
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, to_dir_ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, to_dir_ino, W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -2992,7 +2995,7 @@ static int op_link(const char *src, const char *dest)
> >  	*node_name = 0;
> >  
> >  	fs = fuse4fs_start(ff);
> > -	if (!fs_can_allocate(ff, 2)) {
> > +	if (!fuse4fs_can_allocate(ff, 2)) {
> >  		ret = -ENOSPC;
> >  		goto out2;
> >  	}
> > @@ -3005,7 +3008,7 @@ static int op_link(const char *src, const char *dest)
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, parent, A_OK | W_OK);
> > +	ret = fuse4fs_inum_access(ff, parent, A_OK | W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -3021,7 +3024,7 @@ static int op_link(const char *src, const char *dest)
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_iflags_access(ff, ino, EXT2_INODE(&inode), W_OK);
> > +	ret = fuse4fs_iflags_access(ff, ino, EXT2_INODE(&inode), W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -3066,7 +3069,7 @@ static int op_link(const char *src, const char *dest)
> >  }
> >  
> >  /* Obtain group ids of the process that sent us a command(?) */
> > -static int get_req_groups(struct fuse4fs *ff, gid_t **gids, size_t *nr_gids)
> > +static int fuse4fs_get_groups(struct fuse4fs *ff, gid_t **gids, size_t *nr_gids)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	errcode_t err;
> > @@ -3111,8 +3114,8 @@ static int get_req_groups(struct fuse4fs *ff, gid_t **gids, size_t *nr_gids)
> >   * that initiated the fuse request?  Returns 1 for yes, 0 for no, or a negative
> >   * errno.
> >   */
> > -static int in_file_group(struct fuse_context *ctxt,
> > -			 const struct ext2_inode_large *inode)
> > +static int fuse4fs_in_file_group(struct fuse_context *ctxt,
> > +				 const struct ext2_inode_large *inode)
> >  {
> >  	struct fuse4fs *ff = fuse4fs_get();
> >  	gid_t *gids = NULL;
> > @@ -3124,7 +3127,7 @@ static int in_file_group(struct fuse_context *ctxt,
> >  	if (ctxt->gid == gid)
> >  		return 1;
> >  
> > -	ret = get_req_groups(ff, &gids, &nr_gids);
> > +	ret = fuse4fs_get_groups(ff, &gids, &nr_gids);
> >  	if (ret == -ENOENT) {
> >  		/* magic return code for "could not get caller group info" */
> >  		return 0;
> > @@ -3167,11 +3170,11 @@ static int op_chmod(const char *path, mode_t mode, struct fuse_file_info *fi)
> >  		goto out;
> >  	}
> >  
> > -	ret = check_iflags_access(ff, ino, EXT2_INODE(&inode), W_OK);
> > +	ret = fuse4fs_iflags_access(ff, ino, EXT2_INODE(&inode), W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > -	if (want_check_owner(ff, ctxt) && ctxt->uid != inode_uid(inode)) {
> > +	if (fuse4fs_want_check_owner(ff, ctxt) && ctxt->uid != inode_uid(inode)) {
> >  		ret = -EPERM;
> >  		goto out;
> >  	}
> > @@ -3181,8 +3184,8 @@ static int op_chmod(const char *path, mode_t mode, struct fuse_file_info *fi)
> >  	 * of the user's groups, but FUSE only tells us about the primary
> >  	 * group.
> >  	 */
> > -	if (!is_superuser(ff, ctxt)) {
> > -		ret = in_file_group(ctxt, &inode);
> > +	if (!fuse4fs_is_superuser(ff, ctxt)) {
> > +		ret = fuse4fs_in_file_group(ctxt, &inode);
> >  		if (ret < 0)
> >  			goto out;
> >  
> > @@ -3236,14 +3239,14 @@ static int op_chown(const char *path, uid_t owner, gid_t group,
> >  		goto out;
> >  	}
> >  
> > -	ret = check_iflags_access(ff, ino, EXT2_INODE(&inode), W_OK);
> > +	ret = fuse4fs_iflags_access(ff, ino, EXT2_INODE(&inode), W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> >  	/* FUSE seems to feed us ~0 to mean "don't change" */
> >  	if (owner != (uid_t) ~0) {
> >  		/* Only root gets to change UID. */
> > -		if (want_check_owner(ff, ctxt) &&
> > +		if (fuse4fs_want_check_owner(ff, ctxt) &&
> >  		    !(inode_uid(inode) == ctxt->uid && owner == ctxt->uid)) {
> >  			ret = -EPERM;
> >  			goto out;
> > @@ -3253,7 +3256,7 @@ static int op_chown(const char *path, uid_t owner, gid_t group,
> >  
> >  	if (group != (gid_t) ~0) {
> >  		/* Only root or the owner get to change GID. */
> > -		if (want_check_owner(ff, ctxt) &&
> > +		if (fuse4fs_want_check_owner(ff, ctxt) &&
> >  		    inode_uid(inode) != ctxt->uid) {
> >  			ret = -EPERM;
> >  			goto out;
> > @@ -3363,7 +3366,7 @@ static int op_truncate(const char *path, off_t len, struct fuse_file_info *fi)
> >  		goto out;
> >  	dbg_printf(ff, "%s: ino=%d len=%jd\n", __func__, ino, (intmax_t) len);
> >  
> > -	ret = check_inum_access(ff, ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, ino, W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -3445,7 +3448,7 @@ static int __op_open(struct fuse4fs *ff, const char *path,
> >  	}
> >  	dbg_printf(ff, "%s: ino=%d\n", __func__, file->ino);
> >  
> > -	ret = check_inum_access(ff, file->ino, check);
> > +	ret = fuse4fs_inum_access(ff, file->ino, check);
> >  	if (ret) {
> >  		/*
> >  		 * In a regular (Linux) fs driver, the kernel will open
> > @@ -3457,7 +3460,7 @@ static int __op_open(struct fuse4fs *ff, const char *path,
> >  		 * also employ undocumented hacks (see above).
> >  		 */
> >  		if (check == R_OK) {
> > -			ret = check_inum_access(ff, file->ino, X_OK);
> > +			ret = fuse4fs_inum_access(ff, file->ino, X_OK);
> >  			if (ret)
> >  				goto out;
> >  			check = X_OK;
> > @@ -3568,7 +3571,7 @@ static int op_write(const char *path EXT2FS_ATTR((unused)),
> >  		goto out;
> >  	}
> >  
> > -	if (!fs_can_allocate(ff, FUSE4FS_B_TO_FSB(ff, len))) {
> > +	if (!fuse4fs_can_allocate(ff, FUSE4FS_B_TO_FSB(ff, len))) {
> >  		ret = -ENOSPC;
> >  		goto out;
> >  	}
> > @@ -3768,11 +3771,11 @@ static int op_getxattr(const char *path, const char *key, char *value,
> >  	}
> >  	dbg_printf(ff, "%s: ino=%d name=%s\n", __func__, ino, key);
> >  
> > -	ret = check_inum_access(ff, ino, R_OK);
> > +	ret = fuse4fs_inum_access(ff, ino, R_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > -	ret = __getxattr(ff, ino, key, &ptr, &plen);
> > +	ret = fuse4fs_getxattr(ff, ino, key, &ptr, &plen);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -3838,7 +3841,7 @@ static int op_listxattr(const char *path, char *names, size_t len)
> >  	}
> >  	dbg_printf(ff, "%s: ino=%d\n", __func__, ino);
> >  
> > -	ret = check_inum_access(ff, ino, R_OK);
> > +	ret = fuse4fs_inum_access(ff, ino, R_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -3919,7 +3922,7 @@ static int op_setxattr(const char *path EXT2FS_ATTR((unused)),
> >  	}
> >  	dbg_printf(ff, "%s: ino=%d name=%s\n", __func__, ino, key);
> >  
> > -	ret = check_inum_access(ff, ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, ino, W_OK);
> >  	if (ret == -EACCES) {
> >  		ret = -EPERM;
> >  		goto out;
> > @@ -4008,7 +4011,7 @@ static int op_removexattr(const char *path, const char *key)
> >  		goto out;
> >  	}
> >  
> > -	if (!fs_can_allocate(ff, 1)) {
> > +	if (!fuse4fs_can_allocate(ff, 1)) {
> >  		ret = -ENOSPC;
> >  		goto out;
> >  	}
> > @@ -4020,7 +4023,7 @@ static int op_removexattr(const char *path, const char *key)
> >  	}
> >  	dbg_printf(ff, "%s: ino=%d name=%s\n", __func__, ino, key);
> >  
> > -	ret = check_inum_access(ff, ino, W_OK);
> > +	ret = fuse4fs_inum_access(ff, ino, W_OK);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -4207,7 +4210,7 @@ static int op_access(const char *path, int mask)
> >  		goto out;
> >  	}
> >  
> > -	ret = check_inum_access(ff, ino, mask);
> > +	ret = fuse4fs_inum_access(ff, ino, mask);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -4247,7 +4250,7 @@ static int op_create(const char *path, mode_t mode, struct fuse_file_info *fp)
> >  	*node_name = 0;
> >  
> >  	fs = fuse4fs_start(ff);
> > -	if (!fs_can_allocate(ff, 1)) {
> > +	if (!fuse4fs_can_allocate(ff, 1)) {
> >  		ret = -ENOSPC;
> >  		goto out2;
> >  	}
> > @@ -4259,7 +4262,7 @@ static int op_create(const char *path, mode_t mode, struct fuse_file_info *fp)
> >  		goto out2;
> >  	}
> >  
> > -	ret = check_inum_access(ff, parent, A_OK | W_OK);
> > +	ret = fuse4fs_inum_access(ff, parent, A_OK | W_OK);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -4326,7 +4329,7 @@ static int op_create(const char *path, mode_t mode, struct fuse_file_info *fp)
> >  
> >  	ext2fs_inode_alloc_stats2(fs, child, 1, 0);
> >  
> > -	ret = propagate_default_acls(ff, parent, child, inode.i_mode);
> > +	ret = fuse4fs_propagate_default_acls(ff, parent, child, inode.i_mode);
> >  	if (ret)
> >  		goto out2;
> >  
> > @@ -4374,7 +4377,7 @@ static int op_utimens(const char *path, const struct timespec ctv[2],
> >  	 */
> >  	if (ctv[0].tv_nsec == UTIME_NOW && ctv[1].tv_nsec == UTIME_NOW)
> >  		access |= A_OK;
> > -	ret = check_inum_access(ff, ino, access);
> > +	ret = fuse4fs_inum_access(ff, ino, access);
> >  	if (ret)
> >  		goto out;
> >  
> > @@ -4459,7 +4462,7 @@ static int ioctl_setflags(struct fuse4fs *ff, struct fuse4fs_file_handle *fh,
> >  	if (err)
> >  		return translate_error(fs, fh->ino, err);
> >  
> > -	if (want_check_owner(ff, ctxt) && inode_uid(inode) != ctxt->uid)
> > +	if (fuse4fs_want_check_owner(ff, ctxt) && inode_uid(inode) != ctxt->uid)
> >  		return -EPERM;
> >  
> >  	ret = set_iflags(&inode, flags);
> > @@ -4508,7 +4511,7 @@ static int ioctl_setversion(struct fuse4fs *ff, struct fuse4fs_file_handle *fh,
> >  	if (err)
> >  		return translate_error(fs, fh->ino, err);
> >  
> > -	if (want_check_owner(ff, ctxt) && inode_uid(inode) != ctxt->uid)
> > +	if (fuse4fs_want_check_owner(ff, ctxt) && inode_uid(inode) != ctxt->uid)
> >  		return -EPERM;
> >  
> >  	inode.i_generation = generation;
> > @@ -4633,7 +4636,7 @@ static int ioctl_fssetxattr(struct fuse4fs *ff, struct fuse4fs_file_handle *fh,
> >  	if (err)
> >  		return translate_error(fs, fh->ino, err);
> >  
> > -	if (want_check_owner(ff, ctxt) && inode_uid(inode) != ctxt->uid)
> > +	if (fuse4fs_want_check_owner(ff, ctxt) && inode_uid(inode) != ctxt->uid)
> >  		return -EPERM;
> >  
> >  	ret = set_xflags(&inode, fsx->fsx_xflags);
> > @@ -4762,7 +4765,7 @@ static int ioctl_shutdown(struct fuse4fs *ff, struct fuse4fs_file_handle *fh,
> >  	struct fuse_context *ctxt = fuse_get_context();
> >  	ext2_filsys fs = ff->fs;
> >  
> > -	if (!is_superuser(ff, ctxt))
> > +	if (!fuse4fs_is_superuser(ff, ctxt))
> >  		return -EPERM;
> >  
> >  	err_printf(ff, "%s.\n", _("shut down requested"));
> > @@ -4884,7 +4887,7 @@ static int fuse4fs_allocate_range(struct fuse4fs *ff,
> >  		   (unsigned long long)len,
> >  		   (unsigned long long)start,
> >  		   (unsigned long long)end);
> > -	if (!fs_can_allocate(ff, FUSE4FS_B_TO_FSB(ff, len)))
> > +	if (!fuse4fs_can_allocate(ff, FUSE4FS_B_TO_FSB(ff, len)))
> >  		return -ENOSPC;
> >  
> >  	err = fuse4fs_read_inode(fs, fh->ino, &inode);
> > @@ -4927,9 +4930,9 @@ static int fuse4fs_allocate_range(struct fuse4fs *ff,
> >  	return err;
> >  }
> >  
> > -static errcode_t clean_block_middle(struct fuse4fs *ff, ext2_ino_t ino,
> > -				    struct ext2_inode_large *inode,
> > -				    off_t offset, off_t len, char **buf)
> > +static errcode_t fuse4fs_zero_middle(struct fuse4fs *ff, ext2_ino_t ino,
> > +				     struct ext2_inode_large *inode,
> > +				     off_t offset, off_t len, char **buf)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	blk64_t blk;
> > @@ -4963,9 +4966,9 @@ static errcode_t clean_block_middle(struct fuse4fs *ff, ext2_ino_t ino,
> >  	return io_channel_write_blk64(fs->io, blk, 1, *buf);
> >  }
> >  
> > -static errcode_t clean_block_edge(struct fuse4fs *ff, ext2_ino_t ino,
> > -				  struct ext2_inode_large *inode, off_t offset,
> > -				  int clean_before, char **buf)
> > +static errcode_t fuse4fs_zero_edge(struct fuse4fs *ff, ext2_ino_t ino,
> > +				   struct ext2_inode_large *inode, off_t offset,
> > +				   int clean_before, char **buf)
> >  {
> >  	ext2_filsys fs = ff->fs;
> >  	blk64_t blk;
> > @@ -5056,13 +5059,13 @@ static int fuse4fs_punch_range(struct fuse4fs *ff,
> >  
> >  	/* Zero everything before the first block and after the last block */
> >  	if (FUSE4FS_B_TO_FSBT(ff, offset) == FUSE4FS_B_TO_FSBT(ff, offset + len))
> > -		err = clean_block_middle(ff, fh->ino, &inode, offset,
> > +		err = fuse4fs_zero_middle(ff, fh->ino, &inode, offset,
> >  					 len, &buf);
> >  	else {
> > -		err = clean_block_edge(ff, fh->ino, &inode, offset, 0, &buf);
> > +		err = fuse4fs_zero_edge(ff, fh->ino, &inode, offset, 0, &buf);
> >  		if (!err)
> > -			err = clean_block_edge(ff, fh->ino, &inode,
> > -					       offset + len, 1, &buf);
> > +			err = fuse4fs_zero_edge(ff, fh->ino, &inode,
> > +						offset + len, 1, &buf);
> >  	}
> >  	if (buf)
> >  		ext2fs_free_mem(&buf);
> > 

  reply	other threads:[~2025-11-08  0:25 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-06 22:14 [PATCHBOMB 1.48] fuse2fs: new features, new server Darrick J. Wong
2025-11-06 22:27 ` [PATCHSET 1/9] fuse2fs: fix locking problems Darrick J. Wong
2025-11-06 22:30   ` [PATCH 1/4] libext2fs: add POSIX advisory locking to the unix IO manager Darrick J. Wong
2025-11-06 22:30   ` [PATCH 2/4] fuse2fs: try to lock filesystem image files before using them Darrick J. Wong
2025-11-06 22:30   ` [PATCH 3/4] fuse2fs: quiet down write-protect warning Darrick J. Wong
2025-11-06 22:31   ` [PATCH 4/4] fuse2fs: try to grab block device O_EXCL repeatedly Darrick J. Wong
2025-11-06 22:28 ` [PATCHSET 2/9] fuse2fs: add some easy new features Darrick J. Wong
2025-11-06 22:31   ` [PATCH 01/19] libext2fs: initialize htree when expanding directory Darrick J. Wong
2025-11-06 22:31   ` [PATCH 02/19] libext2fs: create link count adjustment helpers for dir_nlink Darrick J. Wong
2025-11-06 22:31   ` [PATCH 03/19] libext2fs: fix ext2fs_mmp_update Darrick J. Wong
2025-11-06 22:32   ` [PATCH 04/19] libext2fs: refactor aligned MMP buffer allocation Darrick J. Wong
2025-11-06 22:32   ` [PATCH 05/19] libext2fs: always use ext2fs_mmp_get_mem to allocate fs->mmp_buf Darrick J. Wong
2025-11-06 22:32   ` [PATCH 06/19] fuse2fs: check root directory while mounting Darrick J. Wong
2025-11-06 22:32   ` [PATCH 07/19] fuse2fs: read bitmaps asynchronously during initialization Darrick J. Wong
2025-11-06 22:33   ` [PATCH 08/19] fuse2fs: use file handles when possible Darrick J. Wong
2025-11-06 22:33   ` [PATCH 09/19] fuse2fs: implement dir seeking Darrick J. Wong
2025-11-06 22:33   ` [PATCH 10/19] fuse2fs: implement readdirplus Darrick J. Wong
2025-11-06 22:34   ` [PATCH 11/19] fuse2fs: implement dirsync mode Darrick J. Wong
2025-11-06 22:34   ` [PATCH 12/19] fuse2fs: only flush O_SYNC files on close Darrick J. Wong
2025-11-06 22:34   ` [PATCH 13/19] fuse2fs: improve want_extra_isize handling Darrick J. Wong
2025-11-06 22:34   ` [PATCH 14/19] fuse2fs: cache symlink targets in the kernel Darrick J. Wong
2025-11-06 22:35   ` [PATCH 15/19] fuse2fs: constrain worker thread count Darrick J. Wong
2025-11-06 22:35   ` [PATCH 16/19] fuse2fs: improve error handling behaviors Darrick J. Wong
2025-11-06 22:35   ` [PATCH 17/19] fuse2fs: fix link count overflows on dir_nlink filesystems Darrick J. Wong
2025-11-06 22:35   ` [PATCH 18/19] libsupport: add background thread manager Darrick J. Wong
2025-11-06 22:36   ` [PATCH 19/19] fuse2fs: implement MMP updates Darrick J. Wong
2025-11-06 22:28 ` [PATCHSET 3/9] fuse2fs: clean up operation startup Darrick J. Wong
2025-11-06 22:36   ` [PATCH 1/9] fuse2fs: rework FUSE2FS_CHECK_CONTEXT not to rely on global_fs Darrick J. Wong
2025-11-06 22:36   ` [PATCH 2/9] fuse2fs: rework checking file handles Darrick J. Wong
2025-11-06 22:36   ` [PATCH 3/9] fuse2fs: rework fallocate file handle extraction Darrick J. Wong
2025-11-06 22:37   ` [PATCH 4/9] fuse2fs: consolidate file handle checking in op_ioctl Darrick J. Wong
2025-11-06 22:37   ` [PATCH 5/9] fuse2fs: move fs assignment closer to locking the bfl Darrick J. Wong
2025-11-06 22:37   ` [PATCH 6/9] fuse2fs: clean up operation startup Darrick J. Wong
2025-11-06 22:37   ` [PATCH 7/9] fuse2fs: clean up operation completion Darrick J. Wong
2025-11-06 22:38   ` [PATCH 8/9] fuse2fs: clean up more boilerplate Darrick J. Wong
2025-11-06 22:38   ` [PATCH 9/9] fuse2fs: collect runtime of various operations Darrick J. Wong
2025-11-06 22:28 ` [PATCHSET 4/9] fuse2fs: refactor unmount code Darrick J. Wong
2025-11-06 22:38   ` [PATCH 1/3] fuse2fs: get rid of the global_fs variable Darrick J. Wong
2025-11-06 22:39   ` [PATCH 2/3] fuse2fs: hoist lockfile code Darrick J. Wong
2025-11-06 22:39   ` [PATCH 3/3] fuse2fs: hoist unmount code from main Darrick J. Wong
2025-11-06 22:28 ` [PATCHSET 5/9] fuse2fs: refactor mount code Darrick J. Wong
2025-11-06 22:39   ` [PATCH 1/3] fuse2fs: split filesystem mounting into helper functions Darrick J. Wong
2025-11-06 22:39   ` [PATCH 2/3] fuse2fs: register as an IO flusher thread Darrick J. Wong
2025-11-06 22:40   ` [PATCH 3/3] fuse2fs: adjust OOM killer score if possible Darrick J. Wong
2025-11-06 22:29 ` [PATCHSET 6/9] fuse2fs: improve operation tracing Darrick J. Wong
2025-11-06 22:40   ` [PATCH 1/4] fuse2fs: hook library error message printing Darrick J. Wong
2025-11-06 22:40   ` [PATCH 2/4] fuse2fs: print the function name in error messages, not the file name Darrick J. Wong
2025-11-06 22:40   ` [PATCH 3/4] fuse2fs: improve tracing for file range operations Darrick J. Wong
2025-11-06 22:41   ` [PATCH 4/4] fuse2fs: record thread id in debug trace data Darrick J. Wong
2025-11-06 22:29 ` [PATCHSET 7/9] fuse2fs: better tracking of writable state Darrick J. Wong
2025-11-06 22:41   ` [PATCH 1/3] fuse2fs: pass a struct fuse2fs to fs_writeable Darrick J. Wong
2025-11-06 22:41   ` [PATCH 2/3] fuse2fs: track our own writable state Darrick J. Wong
2025-11-06 22:41   ` [PATCH 3/3] fuse2fs: enable the shutdown ioctl Darrick J. Wong
2025-11-06 22:29 ` [PATCHSET 8/9] fuse2fs: upgrade to libfuse 3.17 Darrick J. Wong
2025-11-06 22:42   ` [PATCH 1/4] fuse2fs: bump library version Darrick J. Wong
2025-11-06 22:42   ` [PATCH 2/4] fuse2fs: wrap the fuse_set_feature_flag helper for older libfuse Darrick J. Wong
2025-11-06 22:42   ` [PATCH 3/4] fuse2fs: disable nfs exports Darrick J. Wong
2025-11-06 22:43   ` [PATCH 4/4] fuse2fs: drop fuse 2.x support code Darrick J. Wong
2025-11-06 22:30 ` [PATCHSET 9/9] fuse4fs: fork a low level fuse server Darrick J. Wong
2025-11-06 22:43   ` [PATCH 01/23] fuse2fs: separate libfuse3 and fuse2fs detection in configure Darrick J. Wong
2025-11-06 22:43   ` [PATCH 02/23] fuse2fs: start porting fuse2fs to lowlevel libfuse API Darrick J. Wong
2025-11-06 22:43   ` [PATCH 03/23] debian: create new package for fuse4fs Darrick J. Wong
2025-11-06 22:44   ` [PATCH 04/23] fuse4fs: namespace some helpers Darrick J. Wong
2025-11-07  8:09     ` Amir Goldstein
2025-11-08  0:25       ` Darrick J. Wong [this message]
2025-11-06 22:44   ` [PATCH 05/23] fuse4fs: convert to low level API Darrick J. Wong
2025-11-06 22:44   ` [PATCH 06/23] libsupport: port the kernel list.h to libsupport Darrick J. Wong
2025-11-06 22:44   ` [PATCH 07/23] libsupport: add a cache Darrick J. Wong
2025-11-06 22:45   ` [PATCH 08/23] cache: disable debugging Darrick J. Wong
2025-11-06 22:45   ` [PATCH 09/23] cache: use modern list iterator macros Darrick J. Wong
2025-11-06 22:45   ` [PATCH 10/23] cache: embed struct cache in the owner Darrick J. Wong
2025-11-06 22:45   ` [PATCH 11/23] cache: pass cache pointer to callbacks Darrick J. Wong
2025-11-06 22:46   ` [PATCH 12/23] cache: pass a private data pointer through cache_walk Darrick J. Wong
2025-11-06 22:46   ` [PATCH 13/23] cache: add a helper to grab a new refcount for a cache_node Darrick J. Wong
2025-11-06 22:46   ` [PATCH 14/23] cache: return results of a cache flush Darrick J. Wong
2025-11-06 22:47   ` [PATCH 15/23] cache: add a "get only if incore" flag to cache_node_get Darrick J. Wong
2025-11-06 22:47   ` [PATCH 16/23] cache: support gradual expansion Darrick J. Wong
2025-11-06 22:47   ` [PATCH 17/23] cache: support updating maxcount and flags Darrick J. Wong
2025-11-06 22:47   ` [PATCH 18/23] cache: support channging flags Darrick J. Wong
2025-11-06 22:48   ` [PATCH 19/23] cache: implement automatic shrinking Darrick J. Wong
2025-11-06 22:48   ` [PATCH 20/23] fuse4fs: add cache to track open files Darrick J. Wong
2025-11-06 22:48   ` [PATCH 21/23] fuse4fs: use the orphaned inode list Darrick J. Wong
2025-11-06 22:48   ` [PATCH 22/23] fuse4fs: implement FUSE_TMPFILE Darrick J. Wong
2025-11-06 22:49   ` [PATCH 23/23] fuse4fs: create incore reverse orphan list Darrick J. Wong

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=20251108002542.GN196391@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=amir73il@gmail.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=tytso@mit.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.