[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <174786678229.1384866.9795826246954895736.stgit@frogsfrogsfrogs>
Date: Wed, 21 May 2025 15:43:01 -0700
From: "Darrick J. Wong" <djwong@...nel.org>
To: tytso@....edu
Cc: linux-ext4@...r.kernel.org
Subject: [PATCH 2/3] fuse2fs: simplify reading and writing inodes
From: Darrick J. Wong <djwong@...nel.org>
Wrap the inode read and write methods in a wrapper so that we don't have
to maintain all these silly casts and sizeof operators.
Signed-off-by: "Darrick J. Wong" <djwong@...nel.org>
---
misc/fuse2fs.c | 153 ++++++++++++++++++++------------------------------------
1 file changed, 54 insertions(+), 99 deletions(-)
diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c
index 6921e6dc0a356c..a89ba115bf6f42 100644
--- a/misc/fuse2fs.c
+++ b/misc/fuse2fs.c
@@ -293,6 +293,21 @@ do { \
(timespec)->tv_nsec = 0; \
} while (0)
+static inline errcode_t fuse2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
+ struct ext2_inode_large *inode)
+{
+ memset(inode, 0, sizeof(*inode));
+ return ext2fs_read_inode_full(fs, ino, EXT2_INODE(inode),
+ sizeof(*inode));
+}
+
+static inline errcode_t fuse2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
+ struct ext2_inode_large *inode)
+{
+ return ext2fs_write_inode_full(fs, ino, EXT2_INODE(inode),
+ sizeof(*inode));
+}
+
static void get_now(struct timespec *now)
{
#ifdef CLOCK_REALTIME
@@ -346,17 +361,14 @@ static int update_ctime(ext2_filsys fs, ext2_ino_t ino,
}
/* Otherwise we have to read-modify-write the inode */
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
increment_version(&inode);
EXT4_INODE_SET_XTIME(i_ctime, &now, &inode);
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
@@ -371,9 +383,7 @@ static int update_atime(ext2_filsys fs, ext2_ino_t ino)
if (!(fs->flags & EXT2_FLAG_RW))
return 0;
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
@@ -389,8 +399,7 @@ static int update_atime(ext2_filsys fs, ext2_ino_t ino)
return 0;
EXT4_INODE_SET_XTIME(i_atime, &now, &inode);
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
@@ -412,9 +421,7 @@ static int update_mtime(ext2_filsys fs, ext2_ino_t ino,
return 0;
}
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
@@ -423,8 +430,7 @@ static int update_mtime(ext2_filsys fs, ext2_ino_t ino,
EXT4_INODE_SET_XTIME(i_ctime, &now, &inode);
increment_version(&inode);
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
@@ -725,9 +731,7 @@ static int stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *statbuf)
int ret = 0;
struct timespec tv;
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err)
return translate_error(fs, ino, err);
@@ -1070,8 +1074,7 @@ static int op_mknod(const char *path, mode_t mode, dev_t dev)
inode.i_generation = ff->next_generation++;
init_times(&inode);
- err = ext2fs_write_inode_full(fs, child, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, child, &inode);
if (err) {
ret = translate_error(fs, child, err);
goto out2;
@@ -1139,8 +1142,7 @@ static int op_mkdir(const char *path, mode_t mode)
goto out2;
/* Is the parent dir sgid? */
- err = ext2fs_read_inode_full(fs, parent, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, parent, &inode);
if (err) {
ret = translate_error(fs, parent, err);
goto out2;
@@ -1178,9 +1180,7 @@ static int op_mkdir(const char *path, mode_t mode)
dbg_printf(ff, "%s: created ino=%d/path=%s in dir=%d\n", __func__, child,
node_name, parent);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, child, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, child, &inode);
if (err) {
ret = translate_error(fs, child, err);
goto out2;
@@ -1195,8 +1195,7 @@ static int op_mkdir(const char *path, mode_t mode)
inode.i_generation = ff->next_generation++;
init_times(&inode);
- err = ext2fs_write_inode_full(fs, child, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, child, &inode);
if (err) {
ret = translate_error(fs, child, err);
goto out2;
@@ -1316,9 +1315,7 @@ static int remove_inode(struct fuse2fs *ff, ext2_ino_t ino)
struct ext2_inode_large inode;
int ret = 0;
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -1368,8 +1365,7 @@ static int remove_inode(struct fuse2fs *ff, ext2_ino_t ino)
LINUX_S_ISDIR(inode.i_mode));
write_out:
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -1505,9 +1501,7 @@ static int __op_rmdir(struct fuse2fs *ff, const char *path)
if (rds.parent) {
dbg_printf(ff, "%s: decr dir=%d link count\n", __func__,
rds.parent);
- err = ext2fs_read_inode_full(fs, rds.parent,
- EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, rds.parent, &inode);
if (err) {
ret = translate_error(fs, rds.parent, err);
goto out;
@@ -1517,9 +1511,7 @@ static int __op_rmdir(struct fuse2fs *ff, const char *path)
ret = update_mtime(fs, rds.parent, &inode);
if (ret)
goto out;
- err = ext2fs_write_inode_full(fs, rds.parent,
- EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, rds.parent, &inode);
if (err) {
ret = translate_error(fs, rds.parent, err);
goto out;
@@ -1617,9 +1609,7 @@ static int op_symlink(const char *src, const char *dest)
dbg_printf(ff, "%s: symlinking ino=%d/name=%s to dir=%d\n", __func__,
child, node_name, parent);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, child, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, child, &inode);
if (err) {
ret = translate_error(fs, child, err);
goto out2;
@@ -1632,8 +1622,7 @@ static int op_symlink(const char *src, const char *dest)
inode.i_generation = ff->next_generation++;
init_times(&inode);
- err = ext2fs_write_inode_full(fs, child, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, child, &inode);
if (err) {
ret = translate_error(fs, child, err);
goto out2;
@@ -1966,9 +1955,7 @@ static int op_link(const char *src, const char *dest)
goto out2;
}
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out2;
@@ -1983,8 +1970,7 @@ static int op_link(const char *src, const char *dest)
if (ret)
goto out2;
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out2;
@@ -2108,9 +2094,7 @@ static int op_chmod(const char *path, mode_t mode
}
dbg_printf(ff, "%s: path=%s mode=0%o ino=%d\n", __func__, path, mode, ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -2149,8 +2133,7 @@ static int op_chmod(const char *path, mode_t mode
if (ret)
goto out;
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -2186,9 +2169,7 @@ static int op_chown(const char *path, uid_t owner, gid_t group
dbg_printf(ff, "%s: path=%s owner=%d group=%d ino=%d\n", __func__,
path, owner, group, ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -2227,8 +2208,7 @@ static int op_chown(const char *path, uid_t owner, gid_t group
if (ret)
goto out;
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -3296,8 +3276,7 @@ static int op_create(const char *path, mode_t mode, struct fuse_file_info *fp)
inode.i_generation = ff->next_generation++;
init_times(&inode);
- err = ext2fs_write_inode_full(fs, child, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, child, &inode);
if (err) {
ret = translate_error(fs, child, err);
goto out2;
@@ -3434,9 +3413,7 @@ static int op_utimens(const char *path, const struct timespec ctv[2]
if (ret)
goto out;
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -3460,8 +3437,7 @@ static int op_utimens(const char *path, const struct timespec ctv[2]
if (ret)
goto out;
- err = ext2fs_write_inode_full(fs, ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, ino, &inode);
if (err) {
ret = translate_error(fs, ino, err);
goto out;
@@ -3496,9 +3472,7 @@ static int ioctl_getflags(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3518,9 +3492,7 @@ static int ioctl_setflags(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3535,8 +3507,7 @@ static int ioctl_setflags(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
if (ret)
return ret;
- err = ext2fs_write_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3552,9 +3523,7 @@ static int ioctl_getversion(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3574,9 +3543,7 @@ static int ioctl_setversion(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3589,8 +3556,7 @@ static int ioctl_setversion(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
if (ret)
return ret;
- err = ext2fs_write_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3631,9 +3597,7 @@ static int ioctl_fsgetxattr(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3680,9 +3644,7 @@ static int ioctl_fssetxattr(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3701,8 +3663,7 @@ static int ioctl_fssetxattr(struct fuse2fs *ff, struct fuse2fs_file_handle *fh,
if (ret)
return ret;
- err = ext2fs_write_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -3896,9 +3857,7 @@ static int fallocate_helper(struct fuse_file_info *fp, int mode, off_t offset,
if (!fs_can_allocate(ff, len / fs->blocksize))
return -ENOSPC;
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return err;
fsize = EXT2_I_SIZE(&inode);
@@ -3927,8 +3886,7 @@ static int fallocate_helper(struct fuse_file_info *fp, int mode, off_t offset,
if (err)
return err;
- err = ext2fs_write_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -4036,9 +3994,7 @@ static int punch_helper(struct fuse_file_info *fp, int mode, off_t offset,
dbg_printf(ff, "%s: ino=%d mode=0x%x start=%llu end=%llu\n", __func__,
fh->ino, mode, start, end);
- memset(&inode, 0, sizeof(inode));
- err = ext2fs_read_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_read_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
@@ -4069,8 +4025,7 @@ static int punch_helper(struct fuse_file_info *fp, int mode, off_t offset,
if (err)
return err;
- err = ext2fs_write_inode_full(fs, fh->ino, EXT2_INODE(&inode),
- sizeof(inode));
+ err = fuse2fs_write_inode(fs, fh->ino, &inode);
if (err)
return translate_error(fs, fh->ino, err);
Powered by blists - more mailing lists