aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/fuse/file.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index e5dfc5e4b999..8ee0446a8322 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1131,9 +1131,6 @@ static ssize_t fuse_perform_write(struct kiocb *iocb,
1131 int err = 0; 1131 int err = 0;
1132 ssize_t res = 0; 1132 ssize_t res = 0;
1133 1133
1134 if (is_bad_inode(inode))
1135 return -EIO;
1136
1137 if (inode->i_size < pos + iov_iter_count(ii)) 1134 if (inode->i_size < pos + iov_iter_count(ii))
1138 set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state); 1135 set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1139 1136
@@ -1422,9 +1419,6 @@ static ssize_t __fuse_direct_read(struct fuse_io_priv *io,
1422 ssize_t res; 1419 ssize_t res;
1423 struct inode *inode = file_inode(io->iocb->ki_filp); 1420 struct inode *inode = file_inode(io->iocb->ki_filp);
1424 1421
1425 if (is_bad_inode(inode))
1426 return -EIO;
1427
1428 res = fuse_direct_io(io, iter, ppos, 0); 1422 res = fuse_direct_io(io, iter, ppos, 0);
1429 1423
1430 fuse_invalidate_atime(inode); 1424 fuse_invalidate_atime(inode);
@@ -1439,11 +1433,6 @@ static ssize_t fuse_direct_read_iter(struct kiocb *iocb, struct iov_iter *to)
1439 ssize_t res; 1433 ssize_t res;
1440 1434
1441 if (!is_sync_kiocb(iocb) && iocb->ki_flags & IOCB_DIRECT) { 1435 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
1447 res = fuse_direct_IO(iocb, to); 1436 res = fuse_direct_IO(iocb, to);
1448 } else { 1437 } else {
1449 struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb); 1438 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)
1460 struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb); 1449 struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb);
1461 ssize_t res; 1450 ssize_t res;
1462 1451
1463 if (is_bad_inode(inode))
1464 return -EIO;
1465
1466 /* Don't allow parallel writes to the same file */ 1452 /* Don't allow parallel writes to the same file */
1467 inode_lock(inode); 1453 inode_lock(inode);
1468 res = generic_write_checks(iocb, from); 1454 res = generic_write_checks(iocb, from);
@@ -1484,7 +1470,11 @@ static ssize_t fuse_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
1484 1470
1485static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to) 1471static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
1486{ 1472{
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;
1488 1478
1489 if (!(ff->open_flags & FOPEN_DIRECT_IO)) 1479 if (!(ff->open_flags & FOPEN_DIRECT_IO))
1490 return fuse_cache_read_iter(iocb, to); 1480 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)
1494 1484
1495static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 1485static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1496{ 1486{
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;
1498 1492
1499 if (!(ff->open_flags & FOPEN_DIRECT_IO)) 1493 if (!(ff->open_flags & FOPEN_DIRECT_IO))
1500 return fuse_cache_write_iter(iocb, from); 1494 return fuse_cache_write_iter(iocb, from);