From: Darrick J. Wong <djwong@xxxxxxxxxx> Pass the outer fuse2fs context to fs_writable in preparation for the next patch. Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --- misc/fuse2fs.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index 54753c79abeb1d..b68ae2d216d5d3 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -543,8 +543,10 @@ static int fs_can_allocate(struct fuse2fs *ff, blk64_t num) return ext2fs_free_blocks_count(fs->super) > reserved + num; } -static int fs_writeable(ext2_filsys fs) +static int fs_writeable(struct fuse2fs *ff) { + ext2_filsys fs = ff->fs; + return (fs->flags & EXT2_FLAG_RW) && (fs->super->s_error_count == 0); } @@ -573,12 +575,10 @@ static inline int want_check_owner(struct fuse2fs *ff, static int check_iflags_access(struct fuse2fs *ff, ext2_ino_t ino, const struct ext2_inode *inode, int mask) { - ext2_filsys fs = ff->fs; - EXT2FS_BUILD_BUG_ON((A_OK & (R_OK | W_OK | X_OK | F_OK)) != 0); /* no writing or metadata changes to read-only or broken fs */ - if ((mask & (W_OK | A_OK)) && !fs_writeable(fs)) + if ((mask & (W_OK | A_OK)) && !fs_writeable(ff)) return -EROFS; dbg_printf(ff, "access ino=%d mask=e%s%s%s%s iflags=0x%x\n", @@ -611,7 +611,7 @@ static int check_inum_access(struct fuse2fs *ff, ext2_ino_t ino, int mask) int ret; /* no writing to read-only or broken fs */ - if ((mask & (W_OK | A_OK)) && !fs_writeable(fs)) + if ((mask & (W_OK | A_OK)) && !fs_writeable(ff)) return -EROFS; err = ext2fs_read_inode(fs, ino, &inode); @@ -1203,7 +1203,7 @@ static int op_readlink(const char *path, char *buf, size_t len) } buf[len] = 0; - if (fs_writeable(fs)) { + if (fs_writeable(ff)) { ret = update_atime(fs, ino); if (ret) goto out; @@ -2890,7 +2890,7 @@ static int op_read(const char *path EXT2FS_ATTR((unused)), char *buf, goto out; } - if (fs_writeable(fs)) { + if (fs_writeable(ff)) { ret = update_atime(fs, fh->ino); if (ret) goto out; @@ -2922,7 +2922,7 @@ static int op_write(const char *path EXT2FS_ATTR((unused)), dbg_printf(ff, "%s: ino=%d off=%jd len=%jd\n", __func__, fh->ino, offset, len); pthread_mutex_lock(&ff->bfl); - if (!fs_writeable(fs)) { + if (!fs_writeable(ff)) { ret = -EROFS; goto out; } @@ -2995,7 +2995,7 @@ static int op_release(const char *path EXT2FS_ATTR((unused)), pthread_mutex_lock(&ff->bfl); if ((fp->flags & O_SYNC) && - fs_writeable(fs) && + fs_writeable(ff) && (fh->open_flags & EXT2_FILE_WRITE)) { err = ext2fs_flush2(fs, EXT2_FLAG_FLUSH_NO_SYNC); if (err) @@ -3030,7 +3030,7 @@ static int op_fsync(const char *path EXT2FS_ATTR((unused)), dbg_printf(ff, "%s: ino=%d\n", __func__, fh->ino); /* For now, flush everything, even if it's slow */ pthread_mutex_lock(&ff->bfl); - if (fs_writeable(fs) && fh->open_flags & EXT2_FILE_WRITE) { + if (fs_writeable(ff) && fh->open_flags & EXT2_FILE_WRITE) { err = ext2fs_flush2(fs, 0); if (err) ret = translate_error(fs, fh->ino, err); @@ -3588,7 +3588,7 @@ static int op_readdir(const char *path EXT2FS_ATTR((unused)), goto out; } - if (fs_writeable(i.fs)) { + if (fs_writeable(ff)) { ret = update_atime(i.fs, fh->ino); if (ret) goto out; @@ -3778,7 +3778,7 @@ static int op_ftruncate(const char *path EXT2FS_ATTR((unused)), FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC); dbg_printf(ff, "%s: ino=%d len=%jd\n", __func__, fh->ino, len); pthread_mutex_lock(&ff->bfl); - if (!fs_writeable(fs)) { + if (!fs_writeable(ff)) { ret = -EROFS; goto out; } @@ -4147,7 +4147,7 @@ static int ioctl_fitrim(struct fuse2fs *ff, struct fuse2fs_file_handle *fh, blk64_t max_blks = ext2fs_blocks_count(fs->super); errcode_t err = 0; - if (!fs_writeable(fs)) + if (!fs_writeable(ff)) return -EROFS; start = FUSE2FS_B_TO_FSBT(ff, fr->start); @@ -4520,7 +4520,6 @@ static int op_fallocate(const char *path EXT2FS_ATTR((unused)), int mode, { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; - ext2_filsys fs = ff->fs; int ret; /* Catch unknown flags */ @@ -4528,7 +4527,7 @@ static int op_fallocate(const char *path EXT2FS_ATTR((unused)), int mode, return -EOPNOTSUPP; pthread_mutex_lock(&ff->bfl); - if (!fs_writeable(fs)) { + if (!fs_writeable(ff)) { ret = -EROFS; goto out; }