Commit 05ea48cc authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

fuse: stop copying pages to fuse_req



The page array pointers are also duplicated across fuse_args_pages and
fuse_req.  Get rid of the fuse_req ones.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent d4993774
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -448,15 +448,8 @@ static void fuse_force_creds(struct fuse_conn *fc, struct fuse_req *req)

void fuse_args_to_req(struct fuse_req *req, struct fuse_args *args)
{
	struct fuse_args_pages *ap = container_of(args, typeof(*ap), args);

	req->in.h.opcode = args->opcode;
	req->in.h.nodeid = args->nodeid;
	if (args->in_pages || args->out_pages) {
		req->pages = ap->pages;
		req->page_descs = ap->descs;
		req->num_pages = ap->num_pages;
	}
	req->args = args;
}

@@ -939,14 +932,15 @@ static int fuse_copy_pages(struct fuse_copy_state *cs, unsigned nbytes,
{
	unsigned i;
	struct fuse_req *req = cs->req;
	struct fuse_args_pages *ap = container_of(req->args, typeof(*ap), args);


	for (i = 0; i < req->num_pages && (nbytes || zeroing); i++) {
	for (i = 0; i < ap->num_pages && (nbytes || zeroing); i++) {
		int err;
		unsigned offset = req->page_descs[i].offset;
		unsigned count = min(nbytes, req->page_descs[i].length);
		unsigned int offset = ap->descs[i].offset;
		unsigned int count = min(nbytes, ap->descs[i].length);

		err = fuse_copy_page(cs, &req->pages[i], offset, count,
				     zeroing);
		err = fuse_copy_page(cs, &ap->pages[i], offset, count, zeroing);
		if (err)
			return err;

+0 −9
Original line number Diff line number Diff line
@@ -353,15 +353,6 @@ struct fuse_req {
	/** Used to wake up the task waiting for completion of request*/
	wait_queue_head_t waitq;

	/** page vector */
	struct page **pages;

	/** page-descriptor vector */
	struct fuse_page_desc *page_descs;

	/** number of pages in vector */
	unsigned num_pages;

};

struct fuse_iqueue {