Skip to content

Commit 2f7b6f5

Browse files
author
Miklos Szeredi
committed
fuse: lift bad inode checks into callers
Bad inode checks were done done in various places, and move them into fuse_file_{read|write}_iter(). Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
1 parent 55752a3 commit 2f7b6f5

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

fs/fuse/file.c

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,9 +1131,6 @@ static ssize_t fuse_perform_write(struct kiocb *iocb,
11311131
int err = 0;
11321132
ssize_t res = 0;
11331133

1134-
if (is_bad_inode(inode))
1135-
return -EIO;
1136-
11371134
if (inode->i_size < pos + iov_iter_count(ii))
11381135
set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
11391136

@@ -1422,9 +1419,6 @@ static ssize_t __fuse_direct_read(struct fuse_io_priv *io,
14221419
ssize_t res;
14231420
struct inode *inode = file_inode(io->iocb->ki_filp);
14241421

1425-
if (is_bad_inode(inode))
1426-
return -EIO;
1427-
14281422
res = fuse_direct_io(io, iter, ppos, 0);
14291423

14301424
fuse_invalidate_atime(inode);
@@ -1439,11 +1433,6 @@ static ssize_t fuse_direct_read_iter(struct kiocb *iocb, struct iov_iter *to)
14391433
ssize_t res;
14401434

14411435
if (!is_sync_kiocb(iocb) && iocb->ki_flags & IOCB_DIRECT) {
1442-
struct file *file = iocb->ki_filp;
1443-
1444-
if (is_bad_inode(file_inode(file)))
1445-
return -EIO;
1446-
14471436
res = fuse_direct_IO(iocb, to);
14481437
} else {
14491438
struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb);
@@ -1460,9 +1449,6 @@ static ssize_t fuse_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
14601449
struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb);
14611450
ssize_t res;
14621451

1463-
if (is_bad_inode(inode))
1464-
return -EIO;
1465-
14661452
/* Don't allow parallel writes to the same file */
14671453
inode_lock(inode);
14681454
res = generic_write_checks(iocb, from);
@@ -1484,7 +1470,11 @@ static ssize_t fuse_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
14841470

14851471
static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
14861472
{
1487-
struct fuse_file *ff = iocb->ki_filp->private_data;
1473+
struct file *file = iocb->ki_filp;
1474+
struct fuse_file *ff = file->private_data;
1475+
1476+
if (is_bad_inode(file_inode(file)))
1477+
return -EIO;
14881478

14891479
if (!(ff->open_flags & FOPEN_DIRECT_IO))
14901480
return fuse_cache_read_iter(iocb, to);
@@ -1494,7 +1484,11 @@ static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
14941484

14951485
static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
14961486
{
1497-
struct fuse_file *ff = iocb->ki_filp->private_data;
1487+
struct file *file = iocb->ki_filp;
1488+
struct fuse_file *ff = file->private_data;
1489+
1490+
if (is_bad_inode(file_inode(file)))
1491+
return -EIO;
14981492

14991493
if (!(ff->open_flags & FOPEN_DIRECT_IO))
15001494
return fuse_cache_write_iter(iocb, from);

0 commit comments

Comments
 (0)