generic_file_direct_write(): make use of iov_iter_revert()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
c63ed807d1
commit
639a93a521
|
@ -2704,7 +2704,6 @@ generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from)
|
||||||
ssize_t written;
|
ssize_t written;
|
||||||
size_t write_len;
|
size_t write_len;
|
||||||
pgoff_t end;
|
pgoff_t end;
|
||||||
struct iov_iter data;
|
|
||||||
|
|
||||||
write_len = iov_iter_count(from);
|
write_len = iov_iter_count(from);
|
||||||
end = (pos + write_len - 1) >> PAGE_SHIFT;
|
end = (pos + write_len - 1) >> PAGE_SHIFT;
|
||||||
|
@ -2733,8 +2732,7 @@ generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data = *from;
|
written = mapping->a_ops->direct_IO(iocb, from);
|
||||||
written = mapping->a_ops->direct_IO(iocb, &data);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finally, try again to invalidate clean pages which might have been
|
* Finally, try again to invalidate clean pages which might have been
|
||||||
|
@ -2751,13 +2749,14 @@ generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from)
|
||||||
|
|
||||||
if (written > 0) {
|
if (written > 0) {
|
||||||
pos += written;
|
pos += written;
|
||||||
iov_iter_advance(from, written);
|
write_len -= written;
|
||||||
if (pos > i_size_read(inode) && !S_ISBLK(inode->i_mode)) {
|
if (pos > i_size_read(inode) && !S_ISBLK(inode->i_mode)) {
|
||||||
i_size_write(inode, pos);
|
i_size_write(inode, pos);
|
||||||
mark_inode_dirty(inode);
|
mark_inode_dirty(inode);
|
||||||
}
|
}
|
||||||
iocb->ki_pos = pos;
|
iocb->ki_pos = pos;
|
||||||
}
|
}
|
||||||
|
iov_iter_revert(from, write_len - iov_iter_count(from));
|
||||||
out:
|
out:
|
||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue