diff options
| -rw-r--r-- | fs/fuse/file.c | 26 |
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 | ||
| 1485 | static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to) | 1471 | static 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 | ||
| 1495 | static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from) | 1485 | static 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); |
