xref: /linux/fs/fuse/dev.c (revision 9ce7677cfd7cd871adb457c80bea3b581b839641)
1 /*
2   FUSE: Filesystem in Userspace
3   Copyright (C) 2001-2005  Miklos Szeredi <miklos@szeredi.hu>
4 
5   This program can be distributed under the terms of the GNU GPL.
6   See the file COPYING.
7 */
8 
9 #include "fuse_i.h"
10 
11 #include <linux/init.h>
12 #include <linux/module.h>
13 #include <linux/poll.h>
14 #include <linux/uio.h>
15 #include <linux/miscdevice.h>
16 #include <linux/pagemap.h>
17 #include <linux/file.h>
18 #include <linux/slab.h>
19 
20 MODULE_ALIAS_MISCDEV(FUSE_MINOR);
21 
22 static kmem_cache_t *fuse_req_cachep;
23 
24 static inline struct fuse_conn *fuse_get_conn(struct file *file)
25 {
26 	struct fuse_conn *fc;
27 	spin_lock(&fuse_lock);
28 	fc = file->private_data;
29 	if (fc && !fc->mounted)
30 		fc = NULL;
31 	spin_unlock(&fuse_lock);
32 	return fc;
33 }
34 
35 static inline void fuse_request_init(struct fuse_req *req)
36 {
37 	memset(req, 0, sizeof(*req));
38 	INIT_LIST_HEAD(&req->list);
39 	init_waitqueue_head(&req->waitq);
40 	atomic_set(&req->count, 1);
41 }
42 
43 struct fuse_req *fuse_request_alloc(void)
44 {
45 	struct fuse_req *req = kmem_cache_alloc(fuse_req_cachep, SLAB_KERNEL);
46 	if (req)
47 		fuse_request_init(req);
48 	return req;
49 }
50 
51 void fuse_request_free(struct fuse_req *req)
52 {
53 	kmem_cache_free(fuse_req_cachep, req);
54 }
55 
56 static inline void block_sigs(sigset_t *oldset)
57 {
58 	sigset_t mask;
59 
60 	siginitsetinv(&mask, sigmask(SIGKILL));
61 	sigprocmask(SIG_BLOCK, &mask, oldset);
62 }
63 
64 static inline void restore_sigs(sigset_t *oldset)
65 {
66 	sigprocmask(SIG_SETMASK, oldset, NULL);
67 }
68 
69 void fuse_reset_request(struct fuse_req *req)
70 {
71 	int preallocated = req->preallocated;
72 	BUG_ON(atomic_read(&req->count) != 1);
73 	fuse_request_init(req);
74 	req->preallocated = preallocated;
75 }
76 
77 static void __fuse_get_request(struct fuse_req *req)
78 {
79 	atomic_inc(&req->count);
80 }
81 
82 /* Must be called with > 1 refcount */
83 static void __fuse_put_request(struct fuse_req *req)
84 {
85 	BUG_ON(atomic_read(&req->count) < 2);
86 	atomic_dec(&req->count);
87 }
88 
89 static struct fuse_req *do_get_request(struct fuse_conn *fc)
90 {
91 	struct fuse_req *req;
92 
93 	spin_lock(&fuse_lock);
94 	BUG_ON(list_empty(&fc->unused_list));
95 	req = list_entry(fc->unused_list.next, struct fuse_req, list);
96 	list_del_init(&req->list);
97 	spin_unlock(&fuse_lock);
98 	fuse_request_init(req);
99 	req->preallocated = 1;
100 	req->in.h.uid = current->fsuid;
101 	req->in.h.gid = current->fsgid;
102 	req->in.h.pid = current->pid;
103 	return req;
104 }
105 
106 /* This can return NULL, but only in case it's interrupted by a SIGKILL */
107 struct fuse_req *fuse_get_request(struct fuse_conn *fc)
108 {
109 	int intr;
110 	sigset_t oldset;
111 
112 	block_sigs(&oldset);
113 	intr = down_interruptible(&fc->outstanding_sem);
114 	restore_sigs(&oldset);
115 	return intr ? NULL : do_get_request(fc);
116 }
117 
118 static void fuse_putback_request(struct fuse_conn *fc, struct fuse_req *req)
119 {
120 	spin_lock(&fuse_lock);
121 	if (req->preallocated)
122 		list_add(&req->list, &fc->unused_list);
123 	else
124 		fuse_request_free(req);
125 
126 	/* If we are in debt decrease that first */
127 	if (fc->outstanding_debt)
128 		fc->outstanding_debt--;
129 	else
130 		up(&fc->outstanding_sem);
131 	spin_unlock(&fuse_lock);
132 }
133 
134 void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req)
135 {
136 	if (atomic_dec_and_test(&req->count))
137 		fuse_putback_request(fc, req);
138 }
139 
140 void fuse_release_background(struct fuse_req *req)
141 {
142 	iput(req->inode);
143 	iput(req->inode2);
144 	if (req->file)
145 		fput(req->file);
146 	spin_lock(&fuse_lock);
147 	list_del(&req->bg_entry);
148 	spin_unlock(&fuse_lock);
149 }
150 
151 /*
152  * This function is called when a request is finished.  Either a reply
153  * has arrived or it was interrupted (and not yet sent) or some error
154  * occurred during communication with userspace, or the device file was
155  * closed.  It decreases the reference count for the request.  In case
156  * of a background request the reference to the stored objects are
157  * released.  The requester thread is woken up (if still waiting), and
158  * finally the request is either freed or put on the unused_list
159  *
160  * Called with fuse_lock, unlocks it
161  */
162 static void request_end(struct fuse_conn *fc, struct fuse_req *req)
163 {
164 	int putback;
165 	req->finished = 1;
166 	putback = atomic_dec_and_test(&req->count);
167 	spin_unlock(&fuse_lock);
168 	if (req->background) {
169 		down_read(&fc->sbput_sem);
170 		if (fc->mounted)
171 			fuse_release_background(req);
172 		up_read(&fc->sbput_sem);
173 	}
174 	wake_up(&req->waitq);
175 	if (req->in.h.opcode == FUSE_INIT) {
176 		int i;
177 
178 		if (req->misc.init_in_out.major != FUSE_KERNEL_VERSION)
179 			fc->conn_error = 1;
180 
181 		/* After INIT reply is received other requests can go
182 		   out.  So do (FUSE_MAX_OUTSTANDING - 1) number of
183 		   up()s on outstanding_sem.  The last up() is done in
184 		   fuse_putback_request() */
185 		for (i = 1; i < FUSE_MAX_OUTSTANDING; i++)
186 			up(&fc->outstanding_sem);
187 	} else if (req->in.h.opcode == FUSE_RELEASE && req->inode == NULL) {
188 		/* Special case for failed iget in CREATE */
189 		u64 nodeid = req->in.h.nodeid;
190 		__fuse_get_request(req);
191 		fuse_reset_request(req);
192 		fuse_send_forget(fc, req, nodeid, 1);
193 		putback = 0;
194 	}
195 	if (putback)
196 		fuse_putback_request(fc, req);
197 }
198 
199 /*
200  * Unfortunately request interruption not just solves the deadlock
201  * problem, it causes problems too.  These stem from the fact, that an
202  * interrupted request is continued to be processed in userspace,
203  * while all the locks and object references (inode and file) held
204  * during the operation are released.
205  *
206  * To release the locks is exactly why there's a need to interrupt the
207  * request, so there's not a lot that can be done about this, except
208  * introduce additional locking in userspace.
209  *
210  * More important is to keep inode and file references until userspace
211  * has replied, otherwise FORGET and RELEASE could be sent while the
212  * inode/file is still used by the filesystem.
213  *
214  * For this reason the concept of "background" request is introduced.
215  * An interrupted request is backgrounded if it has been already sent
216  * to userspace.  Backgrounding involves getting an extra reference to
217  * inode(s) or file used in the request, and adding the request to
218  * fc->background list.  When a reply is received for a background
219  * request, the object references are released, and the request is
220  * removed from the list.  If the filesystem is unmounted while there
221  * are still background requests, the list is walked and references
222  * are released as if a reply was received.
223  *
224  * There's one more use for a background request.  The RELEASE message is
225  * always sent as background, since it doesn't return an error or
226  * data.
227  */
228 static void background_request(struct fuse_conn *fc, struct fuse_req *req)
229 {
230 	req->background = 1;
231 	list_add(&req->bg_entry, &fc->background);
232 	if (req->inode)
233 		req->inode = igrab(req->inode);
234 	if (req->inode2)
235 		req->inode2 = igrab(req->inode2);
236 	if (req->file)
237 		get_file(req->file);
238 }
239 
240 /* Called with fuse_lock held.  Releases, and then reacquires it. */
241 static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req)
242 {
243 	sigset_t oldset;
244 
245 	spin_unlock(&fuse_lock);
246 	block_sigs(&oldset);
247 	wait_event_interruptible(req->waitq, req->finished);
248 	restore_sigs(&oldset);
249 	spin_lock(&fuse_lock);
250 	if (req->finished)
251 		return;
252 
253 	req->out.h.error = -EINTR;
254 	req->interrupted = 1;
255 	if (req->locked) {
256 		/* This is uninterruptible sleep, because data is
257 		   being copied to/from the buffers of req.  During
258 		   locked state, there mustn't be any filesystem
259 		   operation (e.g. page fault), since that could lead
260 		   to deadlock */
261 		spin_unlock(&fuse_lock);
262 		wait_event(req->waitq, !req->locked);
263 		spin_lock(&fuse_lock);
264 	}
265 	if (!req->sent && !list_empty(&req->list)) {
266 		list_del(&req->list);
267 		__fuse_put_request(req);
268 	} else if (!req->finished && req->sent)
269 		background_request(fc, req);
270 }
271 
272 static unsigned len_args(unsigned numargs, struct fuse_arg *args)
273 {
274 	unsigned nbytes = 0;
275 	unsigned i;
276 
277 	for (i = 0; i < numargs; i++)
278 		nbytes += args[i].size;
279 
280 	return nbytes;
281 }
282 
283 static void queue_request(struct fuse_conn *fc, struct fuse_req *req)
284 {
285 	fc->reqctr++;
286 	/* zero is special */
287 	if (fc->reqctr == 0)
288 		fc->reqctr = 1;
289 	req->in.h.unique = fc->reqctr;
290 	req->in.h.len = sizeof(struct fuse_in_header) +
291 		len_args(req->in.numargs, (struct fuse_arg *) req->in.args);
292 	if (!req->preallocated) {
293 		/* If request is not preallocated (either FORGET or
294 		   RELEASE), then still decrease outstanding_sem, so
295 		   user can't open infinite number of files while not
296 		   processing the RELEASE requests.  However for
297 		   efficiency do it without blocking, so if down()
298 		   would block, just increase the debt instead */
299 		if (down_trylock(&fc->outstanding_sem))
300 			fc->outstanding_debt++;
301 	}
302 	list_add_tail(&req->list, &fc->pending);
303 	wake_up(&fc->waitq);
304 }
305 
306 /*
307  * This can only be interrupted by a SIGKILL
308  */
309 void request_send(struct fuse_conn *fc, struct fuse_req *req)
310 {
311 	req->isreply = 1;
312 	spin_lock(&fuse_lock);
313 	if (!fc->connected)
314 		req->out.h.error = -ENOTCONN;
315 	else if (fc->conn_error)
316 		req->out.h.error = -ECONNREFUSED;
317 	else {
318 		queue_request(fc, req);
319 		/* acquire extra reference, since request is still needed
320 		   after request_end() */
321 		__fuse_get_request(req);
322 
323 		request_wait_answer(fc, req);
324 	}
325 	spin_unlock(&fuse_lock);
326 }
327 
328 static void request_send_nowait(struct fuse_conn *fc, struct fuse_req *req)
329 {
330 	spin_lock(&fuse_lock);
331 	if (fc->connected) {
332 		queue_request(fc, req);
333 		spin_unlock(&fuse_lock);
334 	} else {
335 		req->out.h.error = -ENOTCONN;
336 		request_end(fc, req);
337 	}
338 }
339 
340 void request_send_noreply(struct fuse_conn *fc, struct fuse_req *req)
341 {
342 	req->isreply = 0;
343 	request_send_nowait(fc, req);
344 }
345 
346 void request_send_background(struct fuse_conn *fc, struct fuse_req *req)
347 {
348 	req->isreply = 1;
349 	spin_lock(&fuse_lock);
350 	background_request(fc, req);
351 	spin_unlock(&fuse_lock);
352 	request_send_nowait(fc, req);
353 }
354 
355 void fuse_send_init(struct fuse_conn *fc)
356 {
357 	/* This is called from fuse_read_super() so there's guaranteed
358 	   to be a request available */
359 	struct fuse_req *req = do_get_request(fc);
360 	struct fuse_init_in_out *arg = &req->misc.init_in_out;
361 	arg->major = FUSE_KERNEL_VERSION;
362 	arg->minor = FUSE_KERNEL_MINOR_VERSION;
363 	req->in.h.opcode = FUSE_INIT;
364 	req->in.numargs = 1;
365 	req->in.args[0].size = sizeof(*arg);
366 	req->in.args[0].value = arg;
367 	req->out.numargs = 1;
368 	req->out.args[0].size = sizeof(*arg);
369 	req->out.args[0].value = arg;
370 	request_send_background(fc, req);
371 }
372 
373 /*
374  * Lock the request.  Up to the next unlock_request() there mustn't be
375  * anything that could cause a page-fault.  If the request was already
376  * interrupted bail out.
377  */
378 static inline int lock_request(struct fuse_req *req)
379 {
380 	int err = 0;
381 	if (req) {
382 		spin_lock(&fuse_lock);
383 		if (req->interrupted)
384 			err = -ENOENT;
385 		else
386 			req->locked = 1;
387 		spin_unlock(&fuse_lock);
388 	}
389 	return err;
390 }
391 
392 /*
393  * Unlock request.  If it was interrupted during being locked, the
394  * requester thread is currently waiting for it to be unlocked, so
395  * wake it up.
396  */
397 static inline void unlock_request(struct fuse_req *req)
398 {
399 	if (req) {
400 		spin_lock(&fuse_lock);
401 		req->locked = 0;
402 		if (req->interrupted)
403 			wake_up(&req->waitq);
404 		spin_unlock(&fuse_lock);
405 	}
406 }
407 
408 struct fuse_copy_state {
409 	int write;
410 	struct fuse_req *req;
411 	const struct iovec *iov;
412 	unsigned long nr_segs;
413 	unsigned long seglen;
414 	unsigned long addr;
415 	struct page *pg;
416 	void *mapaddr;
417 	void *buf;
418 	unsigned len;
419 };
420 
421 static void fuse_copy_init(struct fuse_copy_state *cs, int write,
422 			   struct fuse_req *req, const struct iovec *iov,
423 			   unsigned long nr_segs)
424 {
425 	memset(cs, 0, sizeof(*cs));
426 	cs->write = write;
427 	cs->req = req;
428 	cs->iov = iov;
429 	cs->nr_segs = nr_segs;
430 }
431 
432 /* Unmap and put previous page of userspace buffer */
433 static inline void fuse_copy_finish(struct fuse_copy_state *cs)
434 {
435 	if (cs->mapaddr) {
436 		kunmap_atomic(cs->mapaddr, KM_USER0);
437 		if (cs->write) {
438 			flush_dcache_page(cs->pg);
439 			set_page_dirty_lock(cs->pg);
440 		}
441 		put_page(cs->pg);
442 		cs->mapaddr = NULL;
443 	}
444 }
445 
446 /*
447  * Get another pagefull of userspace buffer, and map it to kernel
448  * address space, and lock request
449  */
450 static int fuse_copy_fill(struct fuse_copy_state *cs)
451 {
452 	unsigned long offset;
453 	int err;
454 
455 	unlock_request(cs->req);
456 	fuse_copy_finish(cs);
457 	if (!cs->seglen) {
458 		BUG_ON(!cs->nr_segs);
459 		cs->seglen = cs->iov[0].iov_len;
460 		cs->addr = (unsigned long) cs->iov[0].iov_base;
461 		cs->iov ++;
462 		cs->nr_segs --;
463 	}
464 	down_read(&current->mm->mmap_sem);
465 	err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0,
466 			     &cs->pg, NULL);
467 	up_read(&current->mm->mmap_sem);
468 	if (err < 0)
469 		return err;
470 	BUG_ON(err != 1);
471 	offset = cs->addr % PAGE_SIZE;
472 	cs->mapaddr = kmap_atomic(cs->pg, KM_USER0);
473 	cs->buf = cs->mapaddr + offset;
474 	cs->len = min(PAGE_SIZE - offset, cs->seglen);
475 	cs->seglen -= cs->len;
476 	cs->addr += cs->len;
477 
478 	return lock_request(cs->req);
479 }
480 
481 /* Do as much copy to/from userspace buffer as we can */
482 static inline int fuse_copy_do(struct fuse_copy_state *cs, void **val,
483 			       unsigned *size)
484 {
485 	unsigned ncpy = min(*size, cs->len);
486 	if (val) {
487 		if (cs->write)
488 			memcpy(cs->buf, *val, ncpy);
489 		else
490 			memcpy(*val, cs->buf, ncpy);
491 		*val += ncpy;
492 	}
493 	*size -= ncpy;
494 	cs->len -= ncpy;
495 	cs->buf += ncpy;
496 	return ncpy;
497 }
498 
499 /*
500  * Copy a page in the request to/from the userspace buffer.  Must be
501  * done atomically
502  */
503 static inline int fuse_copy_page(struct fuse_copy_state *cs, struct page *page,
504 				 unsigned offset, unsigned count, int zeroing)
505 {
506 	if (page && zeroing && count < PAGE_SIZE) {
507 		void *mapaddr = kmap_atomic(page, KM_USER1);
508 		memset(mapaddr, 0, PAGE_SIZE);
509 		kunmap_atomic(mapaddr, KM_USER1);
510 	}
511 	while (count) {
512 		int err;
513 		if (!cs->len && (err = fuse_copy_fill(cs)))
514 			return err;
515 		if (page) {
516 			void *mapaddr = kmap_atomic(page, KM_USER1);
517 			void *buf = mapaddr + offset;
518 			offset += fuse_copy_do(cs, &buf, &count);
519 			kunmap_atomic(mapaddr, KM_USER1);
520 		} else
521 			offset += fuse_copy_do(cs, NULL, &count);
522 	}
523 	if (page && !cs->write)
524 		flush_dcache_page(page);
525 	return 0;
526 }
527 
528 /* Copy pages in the request to/from userspace buffer */
529 static int fuse_copy_pages(struct fuse_copy_state *cs, unsigned nbytes,
530 			   int zeroing)
531 {
532 	unsigned i;
533 	struct fuse_req *req = cs->req;
534 	unsigned offset = req->page_offset;
535 	unsigned count = min(nbytes, (unsigned) PAGE_SIZE - offset);
536 
537 	for (i = 0; i < req->num_pages && (nbytes || zeroing); i++) {
538 		struct page *page = req->pages[i];
539 		int err = fuse_copy_page(cs, page, offset, count, zeroing);
540 		if (err)
541 			return err;
542 
543 		nbytes -= count;
544 		count = min(nbytes, (unsigned) PAGE_SIZE);
545 		offset = 0;
546 	}
547 	return 0;
548 }
549 
550 /* Copy a single argument in the request to/from userspace buffer */
551 static int fuse_copy_one(struct fuse_copy_state *cs, void *val, unsigned size)
552 {
553 	while (size) {
554 		int err;
555 		if (!cs->len && (err = fuse_copy_fill(cs)))
556 			return err;
557 		fuse_copy_do(cs, &val, &size);
558 	}
559 	return 0;
560 }
561 
562 /* Copy request arguments to/from userspace buffer */
563 static int fuse_copy_args(struct fuse_copy_state *cs, unsigned numargs,
564 			  unsigned argpages, struct fuse_arg *args,
565 			  int zeroing)
566 {
567 	int err = 0;
568 	unsigned i;
569 
570 	for (i = 0; !err && i < numargs; i++)  {
571 		struct fuse_arg *arg = &args[i];
572 		if (i == numargs - 1 && argpages)
573 			err = fuse_copy_pages(cs, arg->size, zeroing);
574 		else
575 			err = fuse_copy_one(cs, arg->value, arg->size);
576 	}
577 	return err;
578 }
579 
580 /* Wait until a request is available on the pending list */
581 static void request_wait(struct fuse_conn *fc)
582 {
583 	DECLARE_WAITQUEUE(wait, current);
584 
585 	add_wait_queue_exclusive(&fc->waitq, &wait);
586 	while (fc->mounted && list_empty(&fc->pending)) {
587 		set_current_state(TASK_INTERRUPTIBLE);
588 		if (signal_pending(current))
589 			break;
590 
591 		spin_unlock(&fuse_lock);
592 		schedule();
593 		spin_lock(&fuse_lock);
594 	}
595 	set_current_state(TASK_RUNNING);
596 	remove_wait_queue(&fc->waitq, &wait);
597 }
598 
599 /*
600  * Read a single request into the userspace filesystem's buffer.  This
601  * function waits until a request is available, then removes it from
602  * the pending list and copies request data to userspace buffer.  If
603  * no reply is needed (FORGET) or request has been interrupted or
604  * there was an error during the copying then it's finished by calling
605  * request_end().  Otherwise add it to the processing list, and set
606  * the 'sent' flag.
607  */
608 static ssize_t fuse_dev_readv(struct file *file, const struct iovec *iov,
609 			      unsigned long nr_segs, loff_t *off)
610 {
611 	int err;
612 	struct fuse_conn *fc;
613 	struct fuse_req *req;
614 	struct fuse_in *in;
615 	struct fuse_copy_state cs;
616 	unsigned reqsize;
617 
618 	spin_lock(&fuse_lock);
619 	fc = file->private_data;
620 	err = -EPERM;
621 	if (!fc)
622 		goto err_unlock;
623 	request_wait(fc);
624 	err = -ENODEV;
625 	if (!fc->mounted)
626 		goto err_unlock;
627 	err = -ERESTARTSYS;
628 	if (list_empty(&fc->pending))
629 		goto err_unlock;
630 
631 	req = list_entry(fc->pending.next, struct fuse_req, list);
632 	list_del_init(&req->list);
633 	spin_unlock(&fuse_lock);
634 
635 	in = &req->in;
636 	reqsize = req->in.h.len;
637 	fuse_copy_init(&cs, 1, req, iov, nr_segs);
638 	err = -EINVAL;
639 	if (iov_length(iov, nr_segs) >= reqsize) {
640 		err = fuse_copy_one(&cs, &in->h, sizeof(in->h));
641 		if (!err)
642 			err = fuse_copy_args(&cs, in->numargs, in->argpages,
643 					     (struct fuse_arg *) in->args, 0);
644 	}
645 	fuse_copy_finish(&cs);
646 
647 	spin_lock(&fuse_lock);
648 	req->locked = 0;
649 	if (!err && req->interrupted)
650 		err = -ENOENT;
651 	if (err) {
652 		if (!req->interrupted)
653 			req->out.h.error = -EIO;
654 		request_end(fc, req);
655 		return err;
656 	}
657 	if (!req->isreply)
658 		request_end(fc, req);
659 	else {
660 		req->sent = 1;
661 		list_add_tail(&req->list, &fc->processing);
662 		spin_unlock(&fuse_lock);
663 	}
664 	return reqsize;
665 
666  err_unlock:
667 	spin_unlock(&fuse_lock);
668 	return err;
669 }
670 
671 static ssize_t fuse_dev_read(struct file *file, char __user *buf,
672 			     size_t nbytes, loff_t *off)
673 {
674 	struct iovec iov;
675 	iov.iov_len = nbytes;
676 	iov.iov_base = buf;
677 	return fuse_dev_readv(file, &iov, 1, off);
678 }
679 
680 /* Look up request on processing list by unique ID */
681 static struct fuse_req *request_find(struct fuse_conn *fc, u64 unique)
682 {
683 	struct list_head *entry;
684 
685 	list_for_each(entry, &fc->processing) {
686 		struct fuse_req *req;
687 		req = list_entry(entry, struct fuse_req, list);
688 		if (req->in.h.unique == unique)
689 			return req;
690 	}
691 	return NULL;
692 }
693 
694 static int copy_out_args(struct fuse_copy_state *cs, struct fuse_out *out,
695 			 unsigned nbytes)
696 {
697 	unsigned reqsize = sizeof(struct fuse_out_header);
698 
699 	if (out->h.error)
700 		return nbytes != reqsize ? -EINVAL : 0;
701 
702 	reqsize += len_args(out->numargs, out->args);
703 
704 	if (reqsize < nbytes || (reqsize > nbytes && !out->argvar))
705 		return -EINVAL;
706 	else if (reqsize > nbytes) {
707 		struct fuse_arg *lastarg = &out->args[out->numargs-1];
708 		unsigned diffsize = reqsize - nbytes;
709 		if (diffsize > lastarg->size)
710 			return -EINVAL;
711 		lastarg->size -= diffsize;
712 	}
713 	return fuse_copy_args(cs, out->numargs, out->argpages, out->args,
714 			      out->page_zeroing);
715 }
716 
717 /*
718  * Write a single reply to a request.  First the header is copied from
719  * the write buffer.  The request is then searched on the processing
720  * list by the unique ID found in the header.  If found, then remove
721  * it from the list and copy the rest of the buffer to the request.
722  * The request is finished by calling request_end()
723  */
724 static ssize_t fuse_dev_writev(struct file *file, const struct iovec *iov,
725 			       unsigned long nr_segs, loff_t *off)
726 {
727 	int err;
728 	unsigned nbytes = iov_length(iov, nr_segs);
729 	struct fuse_req *req;
730 	struct fuse_out_header oh;
731 	struct fuse_copy_state cs;
732 	struct fuse_conn *fc = fuse_get_conn(file);
733 	if (!fc)
734 		return -ENODEV;
735 
736 	fuse_copy_init(&cs, 0, NULL, iov, nr_segs);
737 	if (nbytes < sizeof(struct fuse_out_header))
738 		return -EINVAL;
739 
740 	err = fuse_copy_one(&cs, &oh, sizeof(oh));
741 	if (err)
742 		goto err_finish;
743 	err = -EINVAL;
744 	if (!oh.unique || oh.error <= -1000 || oh.error > 0 ||
745 	    oh.len != nbytes)
746 		goto err_finish;
747 
748 	spin_lock(&fuse_lock);
749 	req = request_find(fc, oh.unique);
750 	err = -EINVAL;
751 	if (!req)
752 		goto err_unlock;
753 
754 	list_del_init(&req->list);
755 	if (req->interrupted) {
756 		request_end(fc, req);
757 		fuse_copy_finish(&cs);
758 		return -ENOENT;
759 	}
760 	req->out.h = oh;
761 	req->locked = 1;
762 	cs.req = req;
763 	spin_unlock(&fuse_lock);
764 
765 	err = copy_out_args(&cs, &req->out, nbytes);
766 	fuse_copy_finish(&cs);
767 
768 	spin_lock(&fuse_lock);
769 	req->locked = 0;
770 	if (!err) {
771 		if (req->interrupted)
772 			err = -ENOENT;
773 	} else if (!req->interrupted)
774 		req->out.h.error = -EIO;
775 	request_end(fc, req);
776 
777 	return err ? err : nbytes;
778 
779  err_unlock:
780 	spin_unlock(&fuse_lock);
781  err_finish:
782 	fuse_copy_finish(&cs);
783 	return err;
784 }
785 
786 static ssize_t fuse_dev_write(struct file *file, const char __user *buf,
787 			      size_t nbytes, loff_t *off)
788 {
789 	struct iovec iov;
790 	iov.iov_len = nbytes;
791 	iov.iov_base = (char __user *) buf;
792 	return fuse_dev_writev(file, &iov, 1, off);
793 }
794 
795 static unsigned fuse_dev_poll(struct file *file, poll_table *wait)
796 {
797 	struct fuse_conn *fc = fuse_get_conn(file);
798 	unsigned mask = POLLOUT | POLLWRNORM;
799 
800 	if (!fc)
801 		return -ENODEV;
802 
803 	poll_wait(file, &fc->waitq, wait);
804 
805 	spin_lock(&fuse_lock);
806 	if (!list_empty(&fc->pending))
807                 mask |= POLLIN | POLLRDNORM;
808 	spin_unlock(&fuse_lock);
809 
810 	return mask;
811 }
812 
813 /* Abort all requests on the given list (pending or processing) */
814 static void end_requests(struct fuse_conn *fc, struct list_head *head)
815 {
816 	while (!list_empty(head)) {
817 		struct fuse_req *req;
818 		req = list_entry(head->next, struct fuse_req, list);
819 		list_del_init(&req->list);
820 		req->out.h.error = -ECONNABORTED;
821 		request_end(fc, req);
822 		spin_lock(&fuse_lock);
823 	}
824 }
825 
826 static int fuse_dev_release(struct inode *inode, struct file *file)
827 {
828 	struct fuse_conn *fc;
829 
830 	spin_lock(&fuse_lock);
831 	fc = file->private_data;
832 	if (fc) {
833 		fc->connected = 0;
834 		end_requests(fc, &fc->pending);
835 		end_requests(fc, &fc->processing);
836 		fuse_release_conn(fc);
837 	}
838 	spin_unlock(&fuse_lock);
839 	return 0;
840 }
841 
842 struct file_operations fuse_dev_operations = {
843 	.owner		= THIS_MODULE,
844 	.llseek		= no_llseek,
845 	.read		= fuse_dev_read,
846 	.readv		= fuse_dev_readv,
847 	.write		= fuse_dev_write,
848 	.writev		= fuse_dev_writev,
849 	.poll		= fuse_dev_poll,
850 	.release	= fuse_dev_release,
851 };
852 
853 static struct miscdevice fuse_miscdevice = {
854 	.minor = FUSE_MINOR,
855 	.name  = "fuse",
856 	.fops = &fuse_dev_operations,
857 };
858 
859 int __init fuse_dev_init(void)
860 {
861 	int err = -ENOMEM;
862 	fuse_req_cachep = kmem_cache_create("fuse_request",
863 					    sizeof(struct fuse_req),
864 					    0, 0, NULL, NULL);
865 	if (!fuse_req_cachep)
866 		goto out;
867 
868 	err = misc_register(&fuse_miscdevice);
869 	if (err)
870 		goto out_cache_clean;
871 
872 	return 0;
873 
874  out_cache_clean:
875 	kmem_cache_destroy(fuse_req_cachep);
876  out:
877 	return err;
878 }
879 
880 void fuse_dev_cleanup(void)
881 {
882 	misc_deregister(&fuse_miscdevice);
883 	kmem_cache_destroy(fuse_req_cachep);
884 }
885