]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/iov-iter.c
Merge remote-tracking branch 'cgroup/for-next'
[karo-tx-linux.git] / fs / iov-iter.c
index 5624e367f7600b11725674ea635387c7ac15fd43..ec461c8fea228dc38105f26b8e3dfc9124fb2e16 100644 (file)
@@ -226,6 +226,11 @@ static size_t ii_bvec_single_seg_count(const struct iov_iter *i)
                return min(i->count, bvec->bv_len - i->iov_offset);
 }
 
+static int ii_bvec_shorten(struct iov_iter *i, size_t count)
+{
+       return -EINVAL;
+}
+
 struct iov_iter_ops ii_bvec_ops = {
        .ii_copy_to_user_atomic = ii_bvec_copy_to_user_atomic,
        .ii_copy_to_user = ii_bvec_copy_to_user,
@@ -234,6 +239,7 @@ struct iov_iter_ops ii_bvec_ops = {
        .ii_advance = ii_bvec_advance,
        .ii_fault_in_readable = ii_bvec_fault_in_readable,
        .ii_single_seg_count = ii_bvec_single_seg_count,
+       .ii_shorten = ii_bvec_shorten,
 };
 EXPORT_SYMBOL(ii_bvec_ops);
 #endif /* CONFIG_BLOCK */
@@ -384,6 +390,14 @@ static size_t ii_iovec_single_seg_count(const struct iov_iter *i)
                return min(i->count, iov->iov_len - i->iov_offset);
 }
 
+static int ii_iovec_shorten(struct iov_iter *i, size_t count)
+{
+       struct iovec *iov = (struct iovec *)i->data;
+       i->nr_segs = iov_shorten(iov, i->nr_segs, count);
+       i->count = min(i->count, count);
+       return 0;
+}
+
 struct iov_iter_ops ii_iovec_ops = {
        .ii_copy_to_user_atomic = ii_iovec_copy_to_user_atomic,
        .ii_copy_to_user = ii_iovec_copy_to_user,
@@ -392,5 +406,6 @@ struct iov_iter_ops ii_iovec_ops = {
        .ii_advance = ii_iovec_advance,
        .ii_fault_in_readable = ii_iovec_fault_in_readable,
        .ii_single_seg_count = ii_iovec_single_seg_count,
+       .ii_shorten = ii_iovec_shorten,
 };
 EXPORT_SYMBOL(ii_iovec_ops);