Merge branch 'for-2.6.38/core' of git://git.kernel.dk/linux-2.6-block
* 'for-2.6.38/core' of git://git.kernel.dk/linux-2.6-block: (43 commits) block: ensure that completion error gets properly traced blktrace: add missing probe argument to block_bio_complete block cfq: don't use atomic_t for cfq_group block cfq: don't use atomic_t for cfq_queue block: trace event block fix unassigned field block: add internal hd part table references block: fix accounting bug on cross partition merges kref: add kref_test_and_get bio-integrity: mark kintegrityd_wq highpri and CPU intensive block: make kblockd_workqueue smarter Revert "sd: implement sd_check_events()" block: Clean up exit_io_context() source code. Fix compile warnings due to missing removal of a 'ret' variable fs/block: type signature of major_to_index(int) to major_to_index(unsigned) block: convert !IS_ERR(p) && p to !IS_ERR_NOR_NULL(p) cfq-iosched: don't check cfqg in choose_service_tree() fs/splice: Pull buf->ops->confirm() from splice_from_pipe actors cdrom: export cdrom_check_events() sd: implement sd_check_events() sr: implement sr_check_events() ...
This commit is contained in:
41
fs/splice.c
41
fs/splice.c
@@ -682,19 +682,14 @@ static int pipe_to_sendpage(struct pipe_inode_info *pipe,
|
||||
{
|
||||
struct file *file = sd->u.file;
|
||||
loff_t pos = sd->pos;
|
||||
int ret, more;
|
||||
int more;
|
||||
|
||||
ret = buf->ops->confirm(pipe, buf);
|
||||
if (!ret) {
|
||||
more = (sd->flags & SPLICE_F_MORE) || sd->len < sd->total_len;
|
||||
if (file->f_op && file->f_op->sendpage)
|
||||
ret = file->f_op->sendpage(file, buf->page, buf->offset,
|
||||
sd->len, &pos, more);
|
||||
else
|
||||
ret = -EINVAL;
|
||||
}
|
||||
if (!likely(file->f_op && file->f_op->sendpage))
|
||||
return -EINVAL;
|
||||
|
||||
return ret;
|
||||
more = (sd->flags & SPLICE_F_MORE) || sd->len < sd->total_len;
|
||||
return file->f_op->sendpage(file, buf->page, buf->offset,
|
||||
sd->len, &pos, more);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -727,13 +722,6 @@ int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
|
||||
void *fsdata;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* make sure the data in this buffer is uptodate
|
||||
*/
|
||||
ret = buf->ops->confirm(pipe, buf);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
offset = sd->pos & ~PAGE_CACHE_MASK;
|
||||
|
||||
this_len = sd->len;
|
||||
@@ -805,12 +793,17 @@ int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_desc *sd,
|
||||
if (sd->len > sd->total_len)
|
||||
sd->len = sd->total_len;
|
||||
|
||||
ret = actor(pipe, buf, sd);
|
||||
if (ret <= 0) {
|
||||
ret = buf->ops->confirm(pipe, buf);
|
||||
if (unlikely(ret)) {
|
||||
if (ret == -ENODATA)
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = actor(pipe, buf, sd);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
|
||||
buf->offset += ret;
|
||||
buf->len -= ret;
|
||||
|
||||
@@ -1044,10 +1037,6 @@ static int write_pipe_buf(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
|
||||
int ret;
|
||||
void *data;
|
||||
|
||||
ret = buf->ops->confirm(pipe, buf);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
data = buf->ops->map(pipe, buf, 0);
|
||||
ret = kernel_write(sd->u.file, data + buf->offset, sd->len, sd->pos);
|
||||
buf->ops->unmap(pipe, buf, data);
|
||||
@@ -1495,10 +1484,6 @@ static int pipe_to_user(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
|
||||
char *src;
|
||||
int ret;
|
||||
|
||||
ret = buf->ops->confirm(pipe, buf);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* See if we can use the atomic maps, by prefaulting in the
|
||||
* pages and doing an atomic copy
|
||||
|
Reference in New Issue
Block a user