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