Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 330ab716 authored by Jens Axboe's avatar Jens Axboe
Browse files

[PATCH] vmsplice: restrict stealing a little more



Apply the same rules as the anon pipe pages, only allow stealing
if no one else is using the page.

Signed-off-by: default avatarJens Axboe <axboe@suse.de>
parent a893b99b
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ void generic_pipe_buf_unmap(struct pipe_inode_info *pipe,
		kunmap(buf->page);
}

static int anon_pipe_buf_steal(struct pipe_inode_info *pipe,
int generic_pipe_buf_steal(struct pipe_inode_info *pipe,
			   struct pipe_buffer *buf)
{
	struct page *page = buf->page;
@@ -213,7 +213,7 @@ static struct pipe_buf_operations anon_pipe_buf_ops = {
	.unmap = generic_pipe_buf_unmap,
	.pin = generic_pipe_buf_pin,
	.release = anon_pipe_buf_release,
	.steal = anon_pipe_buf_steal,
	.steal = generic_pipe_buf_steal,
	.get = generic_pipe_buf_get,
};

+1 −1
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ static int user_page_pipe_buf_steal(struct pipe_inode_info *pipe,
	if (!(buf->flags & PIPE_BUF_FLAG_GIFT))
		return 1;

	return 0;
	return generic_pipe_buf_steal(pipe, buf);
}

static struct pipe_buf_operations user_page_pipe_buf_ops = {
+1 −0
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ void *generic_pipe_buf_map(struct pipe_inode_info *, struct pipe_buffer *, int);
void generic_pipe_buf_unmap(struct pipe_inode_info *, struct pipe_buffer *, void *);
void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
int generic_pipe_buf_pin(struct pipe_inode_info *, struct pipe_buffer *);
int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);

/*
 * splice is tied to pipes as a transport (at least for now), so we'll just