|
@@ -725,6 +725,19 @@ out_nls:
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
+static ssize_t
|
|
|
+cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
|
|
|
+{
|
|
|
+ ssize_t rc;
|
|
|
+ struct inode *inode = file_inode(iocb->ki_filp);
|
|
|
+
|
|
|
+ rc = cifs_revalidate_mapping(inode);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+
|
|
|
+ return generic_file_read_iter(iocb, iter);
|
|
|
+}
|
|
|
+
|
|
|
static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
|
|
{
|
|
|
struct inode *inode = file_inode(iocb->ki_filp);
|
|
@@ -881,7 +894,7 @@ const struct inode_operations cifs_symlink_inode_ops = {
|
|
|
const struct file_operations cifs_file_ops = {
|
|
|
.read = new_sync_read,
|
|
|
.write = new_sync_write,
|
|
|
- .read_iter = generic_file_read_iter,
|
|
|
+ .read_iter = cifs_loose_read_iter,
|
|
|
.write_iter = cifs_file_write_iter,
|
|
|
.open = cifs_open,
|
|
|
.release = cifs_close,
|
|
@@ -939,7 +952,7 @@ const struct file_operations cifs_file_direct_ops = {
|
|
|
const struct file_operations cifs_file_nobrl_ops = {
|
|
|
.read = new_sync_read,
|
|
|
.write = new_sync_write,
|
|
|
- .read_iter = generic_file_read_iter,
|
|
|
+ .read_iter = cifs_loose_read_iter,
|
|
|
.write_iter = cifs_file_write_iter,
|
|
|
.open = cifs_open,
|
|
|
.release = cifs_close,
|