Merge tag 'for-v3.18' of git://git.infradead.org/battery-2.6
[cascardo/linux.git] / fs / fuse / dir.c
1 /*
2   FUSE: Filesystem in Userspace
3   Copyright (C) 2001-2008  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/pagemap.h>
12 #include <linux/file.h>
13 #include <linux/sched.h>
14 #include <linux/namei.h>
15 #include <linux/slab.h>
16
17 static bool fuse_use_readdirplus(struct inode *dir, struct dir_context *ctx)
18 {
19         struct fuse_conn *fc = get_fuse_conn(dir);
20         struct fuse_inode *fi = get_fuse_inode(dir);
21
22         if (!fc->do_readdirplus)
23                 return false;
24         if (!fc->readdirplus_auto)
25                 return true;
26         if (test_and_clear_bit(FUSE_I_ADVISE_RDPLUS, &fi->state))
27                 return true;
28         if (ctx->pos == 0)
29                 return true;
30         return false;
31 }
32
33 static void fuse_advise_use_readdirplus(struct inode *dir)
34 {
35         struct fuse_inode *fi = get_fuse_inode(dir);
36
37         set_bit(FUSE_I_ADVISE_RDPLUS, &fi->state);
38 }
39
40 #if BITS_PER_LONG >= 64
41 static inline void fuse_dentry_settime(struct dentry *entry, u64 time)
42 {
43         entry->d_time = time;
44 }
45
46 static inline u64 fuse_dentry_time(struct dentry *entry)
47 {
48         return entry->d_time;
49 }
50 #else
51 /*
52  * On 32 bit archs store the high 32 bits of time in d_fsdata
53  */
54 static void fuse_dentry_settime(struct dentry *entry, u64 time)
55 {
56         entry->d_time = time;
57         entry->d_fsdata = (void *) (unsigned long) (time >> 32);
58 }
59
60 static u64 fuse_dentry_time(struct dentry *entry)
61 {
62         return (u64) entry->d_time +
63                 ((u64) (unsigned long) entry->d_fsdata << 32);
64 }
65 #endif
66
67 /*
68  * FUSE caches dentries and attributes with separate timeout.  The
69  * time in jiffies until the dentry/attributes are valid is stored in
70  * dentry->d_time and fuse_inode->i_time respectively.
71  */
72
73 /*
74  * Calculate the time in jiffies until a dentry/attributes are valid
75  */
76 static u64 time_to_jiffies(unsigned long sec, unsigned long nsec)
77 {
78         if (sec || nsec) {
79                 struct timespec ts = {sec, nsec};
80                 return get_jiffies_64() + timespec_to_jiffies(&ts);
81         } else
82                 return 0;
83 }
84
85 /*
86  * Set dentry and possibly attribute timeouts from the lookup/mk*
87  * replies
88  */
89 static void fuse_change_entry_timeout(struct dentry *entry,
90                                       struct fuse_entry_out *o)
91 {
92         fuse_dentry_settime(entry,
93                 time_to_jiffies(o->entry_valid, o->entry_valid_nsec));
94 }
95
96 static u64 attr_timeout(struct fuse_attr_out *o)
97 {
98         return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
99 }
100
101 static u64 entry_attr_timeout(struct fuse_entry_out *o)
102 {
103         return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
104 }
105
106 /*
107  * Mark the attributes as stale, so that at the next call to
108  * ->getattr() they will be fetched from userspace
109  */
110 void fuse_invalidate_attr(struct inode *inode)
111 {
112         get_fuse_inode(inode)->i_time = 0;
113 }
114
115 /**
116  * Mark the attributes as stale due to an atime change.  Avoid the invalidate if
117  * atime is not used.
118  */
119 void fuse_invalidate_atime(struct inode *inode)
120 {
121         if (!IS_RDONLY(inode))
122                 fuse_invalidate_attr(inode);
123 }
124
125 /*
126  * Just mark the entry as stale, so that a next attempt to look it up
127  * will result in a new lookup call to userspace
128  *
129  * This is called when a dentry is about to become negative and the
130  * timeout is unknown (unlink, rmdir, rename and in some cases
131  * lookup)
132  */
133 void fuse_invalidate_entry_cache(struct dentry *entry)
134 {
135         fuse_dentry_settime(entry, 0);
136 }
137
138 /*
139  * Same as fuse_invalidate_entry_cache(), but also try to remove the
140  * dentry from the hash
141  */
142 static void fuse_invalidate_entry(struct dentry *entry)
143 {
144         d_invalidate(entry);
145         fuse_invalidate_entry_cache(entry);
146 }
147
148 static void fuse_lookup_init(struct fuse_conn *fc, struct fuse_req *req,
149                              u64 nodeid, struct qstr *name,
150                              struct fuse_entry_out *outarg)
151 {
152         memset(outarg, 0, sizeof(struct fuse_entry_out));
153         req->in.h.opcode = FUSE_LOOKUP;
154         req->in.h.nodeid = nodeid;
155         req->in.numargs = 1;
156         req->in.args[0].size = name->len + 1;
157         req->in.args[0].value = name->name;
158         req->out.numargs = 1;
159         if (fc->minor < 9)
160                 req->out.args[0].size = FUSE_COMPAT_ENTRY_OUT_SIZE;
161         else
162                 req->out.args[0].size = sizeof(struct fuse_entry_out);
163         req->out.args[0].value = outarg;
164 }
165
166 u64 fuse_get_attr_version(struct fuse_conn *fc)
167 {
168         u64 curr_version;
169
170         /*
171          * The spin lock isn't actually needed on 64bit archs, but we
172          * don't yet care too much about such optimizations.
173          */
174         spin_lock(&fc->lock);
175         curr_version = fc->attr_version;
176         spin_unlock(&fc->lock);
177
178         return curr_version;
179 }
180
181 /*
182  * Check whether the dentry is still valid
183  *
184  * If the entry validity timeout has expired and the dentry is
185  * positive, try to redo the lookup.  If the lookup results in a
186  * different inode, then let the VFS invalidate the dentry and redo
187  * the lookup once more.  If the lookup results in the same inode,
188  * then refresh the attributes, timeouts and mark the dentry valid.
189  */
190 static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)
191 {
192         struct inode *inode;
193         struct dentry *parent;
194         struct fuse_conn *fc;
195         struct fuse_inode *fi;
196         int ret;
197
198         inode = ACCESS_ONCE(entry->d_inode);
199         if (inode && is_bad_inode(inode))
200                 goto invalid;
201         else if (time_before64(fuse_dentry_time(entry), get_jiffies_64()) ||
202                  (flags & LOOKUP_REVAL)) {
203                 int err;
204                 struct fuse_entry_out outarg;
205                 struct fuse_req *req;
206                 struct fuse_forget_link *forget;
207                 u64 attr_version;
208
209                 /* For negative dentries, always do a fresh lookup */
210                 if (!inode)
211                         goto invalid;
212
213                 ret = -ECHILD;
214                 if (flags & LOOKUP_RCU)
215                         goto out;
216
217                 fc = get_fuse_conn(inode);
218                 req = fuse_get_req_nopages(fc);
219                 ret = PTR_ERR(req);
220                 if (IS_ERR(req))
221                         goto out;
222
223                 forget = fuse_alloc_forget();
224                 if (!forget) {
225                         fuse_put_request(fc, req);
226                         ret = -ENOMEM;
227                         goto out;
228                 }
229
230                 attr_version = fuse_get_attr_version(fc);
231
232                 parent = dget_parent(entry);
233                 fuse_lookup_init(fc, req, get_node_id(parent->d_inode),
234                                  &entry->d_name, &outarg);
235                 fuse_request_send(fc, req);
236                 dput(parent);
237                 err = req->out.h.error;
238                 fuse_put_request(fc, req);
239                 /* Zero nodeid is same as -ENOENT */
240                 if (!err && !outarg.nodeid)
241                         err = -ENOENT;
242                 if (!err) {
243                         fi = get_fuse_inode(inode);
244                         if (outarg.nodeid != get_node_id(inode)) {
245                                 fuse_queue_forget(fc, forget, outarg.nodeid, 1);
246                                 goto invalid;
247                         }
248                         spin_lock(&fc->lock);
249                         fi->nlookup++;
250                         spin_unlock(&fc->lock);
251                 }
252                 kfree(forget);
253                 if (err || (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
254                         goto invalid;
255
256                 fuse_change_attributes(inode, &outarg.attr,
257                                        entry_attr_timeout(&outarg),
258                                        attr_version);
259                 fuse_change_entry_timeout(entry, &outarg);
260         } else if (inode) {
261                 fi = get_fuse_inode(inode);
262                 if (flags & LOOKUP_RCU) {
263                         if (test_bit(FUSE_I_INIT_RDPLUS, &fi->state))
264                                 return -ECHILD;
265                 } else if (test_and_clear_bit(FUSE_I_INIT_RDPLUS, &fi->state)) {
266                         parent = dget_parent(entry);
267                         fuse_advise_use_readdirplus(parent->d_inode);
268                         dput(parent);
269                 }
270         }
271         ret = 1;
272 out:
273         return ret;
274
275 invalid:
276         ret = 0;
277         goto out;
278 }
279
280 static int invalid_nodeid(u64 nodeid)
281 {
282         return !nodeid || nodeid == FUSE_ROOT_ID;
283 }
284
285 const struct dentry_operations fuse_dentry_operations = {
286         .d_revalidate   = fuse_dentry_revalidate,
287 };
288
289 int fuse_valid_type(int m)
290 {
291         return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) ||
292                 S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
293 }
294
295 int fuse_lookup_name(struct super_block *sb, u64 nodeid, struct qstr *name,
296                      struct fuse_entry_out *outarg, struct inode **inode)
297 {
298         struct fuse_conn *fc = get_fuse_conn_super(sb);
299         struct fuse_req *req;
300         struct fuse_forget_link *forget;
301         u64 attr_version;
302         int err;
303
304         *inode = NULL;
305         err = -ENAMETOOLONG;
306         if (name->len > FUSE_NAME_MAX)
307                 goto out;
308
309         req = fuse_get_req_nopages(fc);
310         err = PTR_ERR(req);
311         if (IS_ERR(req))
312                 goto out;
313
314         forget = fuse_alloc_forget();
315         err = -ENOMEM;
316         if (!forget) {
317                 fuse_put_request(fc, req);
318                 goto out;
319         }
320
321         attr_version = fuse_get_attr_version(fc);
322
323         fuse_lookup_init(fc, req, nodeid, name, outarg);
324         fuse_request_send(fc, req);
325         err = req->out.h.error;
326         fuse_put_request(fc, req);
327         /* Zero nodeid is same as -ENOENT, but with valid timeout */
328         if (err || !outarg->nodeid)
329                 goto out_put_forget;
330
331         err = -EIO;
332         if (!outarg->nodeid)
333                 goto out_put_forget;
334         if (!fuse_valid_type(outarg->attr.mode))
335                 goto out_put_forget;
336
337         *inode = fuse_iget(sb, outarg->nodeid, outarg->generation,
338                            &outarg->attr, entry_attr_timeout(outarg),
339                            attr_version);
340         err = -ENOMEM;
341         if (!*inode) {
342                 fuse_queue_forget(fc, forget, outarg->nodeid, 1);
343                 goto out;
344         }
345         err = 0;
346
347  out_put_forget:
348         kfree(forget);
349  out:
350         return err;
351 }
352
353 static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
354                                   unsigned int flags)
355 {
356         int err;
357         struct fuse_entry_out outarg;
358         struct inode *inode;
359         struct dentry *newent;
360         bool outarg_valid = true;
361
362         err = fuse_lookup_name(dir->i_sb, get_node_id(dir), &entry->d_name,
363                                &outarg, &inode);
364         if (err == -ENOENT) {
365                 outarg_valid = false;
366                 err = 0;
367         }
368         if (err)
369                 goto out_err;
370
371         err = -EIO;
372         if (inode && get_node_id(inode) == FUSE_ROOT_ID)
373                 goto out_iput;
374
375         newent = d_materialise_unique(entry, inode);
376         err = PTR_ERR(newent);
377         if (IS_ERR(newent))
378                 goto out_err;
379
380         entry = newent ? newent : entry;
381         if (outarg_valid)
382                 fuse_change_entry_timeout(entry, &outarg);
383         else
384                 fuse_invalidate_entry_cache(entry);
385
386         fuse_advise_use_readdirplus(dir);
387         return newent;
388
389  out_iput:
390         iput(inode);
391  out_err:
392         return ERR_PTR(err);
393 }
394
395 /*
396  * Atomic create+open operation
397  *
398  * If the filesystem doesn't support this, then fall back to separate
399  * 'mknod' + 'open' requests.
400  */
401 static int fuse_create_open(struct inode *dir, struct dentry *entry,
402                             struct file *file, unsigned flags,
403                             umode_t mode, int *opened)
404 {
405         int err;
406         struct inode *inode;
407         struct fuse_conn *fc = get_fuse_conn(dir);
408         struct fuse_req *req;
409         struct fuse_forget_link *forget;
410         struct fuse_create_in inarg;
411         struct fuse_open_out outopen;
412         struct fuse_entry_out outentry;
413         struct fuse_file *ff;
414
415         /* Userspace expects S_IFREG in create mode */
416         BUG_ON((mode & S_IFMT) != S_IFREG);
417
418         forget = fuse_alloc_forget();
419         err = -ENOMEM;
420         if (!forget)
421                 goto out_err;
422
423         req = fuse_get_req_nopages(fc);
424         err = PTR_ERR(req);
425         if (IS_ERR(req))
426                 goto out_put_forget_req;
427
428         err = -ENOMEM;
429         ff = fuse_file_alloc(fc);
430         if (!ff)
431                 goto out_put_request;
432
433         if (!fc->dont_mask)
434                 mode &= ~current_umask();
435
436         flags &= ~O_NOCTTY;
437         memset(&inarg, 0, sizeof(inarg));
438         memset(&outentry, 0, sizeof(outentry));
439         inarg.flags = flags;
440         inarg.mode = mode;
441         inarg.umask = current_umask();
442         req->in.h.opcode = FUSE_CREATE;
443         req->in.h.nodeid = get_node_id(dir);
444         req->in.numargs = 2;
445         req->in.args[0].size = fc->minor < 12 ? sizeof(struct fuse_open_in) :
446                                                 sizeof(inarg);
447         req->in.args[0].value = &inarg;
448         req->in.args[1].size = entry->d_name.len + 1;
449         req->in.args[1].value = entry->d_name.name;
450         req->out.numargs = 2;
451         if (fc->minor < 9)
452                 req->out.args[0].size = FUSE_COMPAT_ENTRY_OUT_SIZE;
453         else
454                 req->out.args[0].size = sizeof(outentry);
455         req->out.args[0].value = &outentry;
456         req->out.args[1].size = sizeof(outopen);
457         req->out.args[1].value = &outopen;
458         fuse_request_send(fc, req);
459         err = req->out.h.error;
460         if (err)
461                 goto out_free_ff;
462
463         err = -EIO;
464         if (!S_ISREG(outentry.attr.mode) || invalid_nodeid(outentry.nodeid))
465                 goto out_free_ff;
466
467         fuse_put_request(fc, req);
468         ff->fh = outopen.fh;
469         ff->nodeid = outentry.nodeid;
470         ff->open_flags = outopen.open_flags;
471         inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation,
472                           &outentry.attr, entry_attr_timeout(&outentry), 0);
473         if (!inode) {
474                 flags &= ~(O_CREAT | O_EXCL | O_TRUNC);
475                 fuse_sync_release(ff, flags);
476                 fuse_queue_forget(fc, forget, outentry.nodeid, 1);
477                 err = -ENOMEM;
478                 goto out_err;
479         }
480         kfree(forget);
481         d_instantiate(entry, inode);
482         fuse_change_entry_timeout(entry, &outentry);
483         fuse_invalidate_attr(dir);
484         err = finish_open(file, entry, generic_file_open, opened);
485         if (err) {
486                 fuse_sync_release(ff, flags);
487         } else {
488                 file->private_data = fuse_file_get(ff);
489                 fuse_finish_open(inode, file);
490         }
491         return err;
492
493 out_free_ff:
494         fuse_file_free(ff);
495 out_put_request:
496         fuse_put_request(fc, req);
497 out_put_forget_req:
498         kfree(forget);
499 out_err:
500         return err;
501 }
502
503 static int fuse_mknod(struct inode *, struct dentry *, umode_t, dev_t);
504 static int fuse_atomic_open(struct inode *dir, struct dentry *entry,
505                             struct file *file, unsigned flags,
506                             umode_t mode, int *opened)
507 {
508         int err;
509         struct fuse_conn *fc = get_fuse_conn(dir);
510         struct dentry *res = NULL;
511
512         if (d_unhashed(entry)) {
513                 res = fuse_lookup(dir, entry, 0);
514                 if (IS_ERR(res))
515                         return PTR_ERR(res);
516
517                 if (res)
518                         entry = res;
519         }
520
521         if (!(flags & O_CREAT) || entry->d_inode)
522                 goto no_open;
523
524         /* Only creates */
525         *opened |= FILE_CREATED;
526
527         if (fc->no_create)
528                 goto mknod;
529
530         err = fuse_create_open(dir, entry, file, flags, mode, opened);
531         if (err == -ENOSYS) {
532                 fc->no_create = 1;
533                 goto mknod;
534         }
535 out_dput:
536         dput(res);
537         return err;
538
539 mknod:
540         err = fuse_mknod(dir, entry, mode, 0);
541         if (err)
542                 goto out_dput;
543 no_open:
544         return finish_no_open(file, res);
545 }
546
547 /*
548  * Code shared between mknod, mkdir, symlink and link
549  */
550 static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req,
551                             struct inode *dir, struct dentry *entry,
552                             umode_t mode)
553 {
554         struct fuse_entry_out outarg;
555         struct inode *inode;
556         int err;
557         struct fuse_forget_link *forget;
558
559         forget = fuse_alloc_forget();
560         if (!forget) {
561                 fuse_put_request(fc, req);
562                 return -ENOMEM;
563         }
564
565         memset(&outarg, 0, sizeof(outarg));
566         req->in.h.nodeid = get_node_id(dir);
567         req->out.numargs = 1;
568         if (fc->minor < 9)
569                 req->out.args[0].size = FUSE_COMPAT_ENTRY_OUT_SIZE;
570         else
571                 req->out.args[0].size = sizeof(outarg);
572         req->out.args[0].value = &outarg;
573         fuse_request_send(fc, req);
574         err = req->out.h.error;
575         fuse_put_request(fc, req);
576         if (err)
577                 goto out_put_forget_req;
578
579         err = -EIO;
580         if (invalid_nodeid(outarg.nodeid))
581                 goto out_put_forget_req;
582
583         if ((outarg.attr.mode ^ mode) & S_IFMT)
584                 goto out_put_forget_req;
585
586         inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
587                           &outarg.attr, entry_attr_timeout(&outarg), 0);
588         if (!inode) {
589                 fuse_queue_forget(fc, forget, outarg.nodeid, 1);
590                 return -ENOMEM;
591         }
592         kfree(forget);
593
594         err = d_instantiate_no_diralias(entry, inode);
595         if (err)
596                 return err;
597
598         fuse_change_entry_timeout(entry, &outarg);
599         fuse_invalidate_attr(dir);
600         return 0;
601
602  out_put_forget_req:
603         kfree(forget);
604         return err;
605 }
606
607 static int fuse_mknod(struct inode *dir, struct dentry *entry, umode_t mode,
608                       dev_t rdev)
609 {
610         struct fuse_mknod_in inarg;
611         struct fuse_conn *fc = get_fuse_conn(dir);
612         struct fuse_req *req = fuse_get_req_nopages(fc);
613         if (IS_ERR(req))
614                 return PTR_ERR(req);
615
616         if (!fc->dont_mask)
617                 mode &= ~current_umask();
618
619         memset(&inarg, 0, sizeof(inarg));
620         inarg.mode = mode;
621         inarg.rdev = new_encode_dev(rdev);
622         inarg.umask = current_umask();
623         req->in.h.opcode = FUSE_MKNOD;
624         req->in.numargs = 2;
625         req->in.args[0].size = fc->minor < 12 ? FUSE_COMPAT_MKNOD_IN_SIZE :
626                                                 sizeof(inarg);
627         req->in.args[0].value = &inarg;
628         req->in.args[1].size = entry->d_name.len + 1;
629         req->in.args[1].value = entry->d_name.name;
630         return create_new_entry(fc, req, dir, entry, mode);
631 }
632
633 static int fuse_create(struct inode *dir, struct dentry *entry, umode_t mode,
634                        bool excl)
635 {
636         return fuse_mknod(dir, entry, mode, 0);
637 }
638
639 static int fuse_mkdir(struct inode *dir, struct dentry *entry, umode_t mode)
640 {
641         struct fuse_mkdir_in inarg;
642         struct fuse_conn *fc = get_fuse_conn(dir);
643         struct fuse_req *req = fuse_get_req_nopages(fc);
644         if (IS_ERR(req))
645                 return PTR_ERR(req);
646
647         if (!fc->dont_mask)
648                 mode &= ~current_umask();
649
650         memset(&inarg, 0, sizeof(inarg));
651         inarg.mode = mode;
652         inarg.umask = current_umask();
653         req->in.h.opcode = FUSE_MKDIR;
654         req->in.numargs = 2;
655         req->in.args[0].size = sizeof(inarg);
656         req->in.args[0].value = &inarg;
657         req->in.args[1].size = entry->d_name.len + 1;
658         req->in.args[1].value = entry->d_name.name;
659         return create_new_entry(fc, req, dir, entry, S_IFDIR);
660 }
661
662 static int fuse_symlink(struct inode *dir, struct dentry *entry,
663                         const char *link)
664 {
665         struct fuse_conn *fc = get_fuse_conn(dir);
666         unsigned len = strlen(link) + 1;
667         struct fuse_req *req = fuse_get_req_nopages(fc);
668         if (IS_ERR(req))
669                 return PTR_ERR(req);
670
671         req->in.h.opcode = FUSE_SYMLINK;
672         req->in.numargs = 2;
673         req->in.args[0].size = entry->d_name.len + 1;
674         req->in.args[0].value = entry->d_name.name;
675         req->in.args[1].size = len;
676         req->in.args[1].value = link;
677         return create_new_entry(fc, req, dir, entry, S_IFLNK);
678 }
679
680 static inline void fuse_update_ctime(struct inode *inode)
681 {
682         if (!IS_NOCMTIME(inode)) {
683                 inode->i_ctime = current_fs_time(inode->i_sb);
684                 mark_inode_dirty_sync(inode);
685         }
686 }
687
688 static int fuse_unlink(struct inode *dir, struct dentry *entry)
689 {
690         int err;
691         struct fuse_conn *fc = get_fuse_conn(dir);
692         struct fuse_req *req = fuse_get_req_nopages(fc);
693         if (IS_ERR(req))
694                 return PTR_ERR(req);
695
696         req->in.h.opcode = FUSE_UNLINK;
697         req->in.h.nodeid = get_node_id(dir);
698         req->in.numargs = 1;
699         req->in.args[0].size = entry->d_name.len + 1;
700         req->in.args[0].value = entry->d_name.name;
701         fuse_request_send(fc, req);
702         err = req->out.h.error;
703         fuse_put_request(fc, req);
704         if (!err) {
705                 struct inode *inode = entry->d_inode;
706                 struct fuse_inode *fi = get_fuse_inode(inode);
707
708                 spin_lock(&fc->lock);
709                 fi->attr_version = ++fc->attr_version;
710                 /*
711                  * If i_nlink == 0 then unlink doesn't make sense, yet this can
712                  * happen if userspace filesystem is careless.  It would be
713                  * difficult to enforce correct nlink usage so just ignore this
714                  * condition here
715                  */
716                 if (inode->i_nlink > 0)
717                         drop_nlink(inode);
718                 spin_unlock(&fc->lock);
719                 fuse_invalidate_attr(inode);
720                 fuse_invalidate_attr(dir);
721                 fuse_invalidate_entry_cache(entry);
722                 fuse_update_ctime(inode);
723         } else if (err == -EINTR)
724                 fuse_invalidate_entry(entry);
725         return err;
726 }
727
728 static int fuse_rmdir(struct inode *dir, struct dentry *entry)
729 {
730         int err;
731         struct fuse_conn *fc = get_fuse_conn(dir);
732         struct fuse_req *req = fuse_get_req_nopages(fc);
733         if (IS_ERR(req))
734                 return PTR_ERR(req);
735
736         req->in.h.opcode = FUSE_RMDIR;
737         req->in.h.nodeid = get_node_id(dir);
738         req->in.numargs = 1;
739         req->in.args[0].size = entry->d_name.len + 1;
740         req->in.args[0].value = entry->d_name.name;
741         fuse_request_send(fc, req);
742         err = req->out.h.error;
743         fuse_put_request(fc, req);
744         if (!err) {
745                 clear_nlink(entry->d_inode);
746                 fuse_invalidate_attr(dir);
747                 fuse_invalidate_entry_cache(entry);
748         } else if (err == -EINTR)
749                 fuse_invalidate_entry(entry);
750         return err;
751 }
752
753 static int fuse_rename_common(struct inode *olddir, struct dentry *oldent,
754                               struct inode *newdir, struct dentry *newent,
755                               unsigned int flags, int opcode, size_t argsize)
756 {
757         int err;
758         struct fuse_rename2_in inarg;
759         struct fuse_conn *fc = get_fuse_conn(olddir);
760         struct fuse_req *req;
761
762         req = fuse_get_req_nopages(fc);
763         if (IS_ERR(req))
764                 return PTR_ERR(req);
765
766         memset(&inarg, 0, argsize);
767         inarg.newdir = get_node_id(newdir);
768         inarg.flags = flags;
769         req->in.h.opcode = opcode;
770         req->in.h.nodeid = get_node_id(olddir);
771         req->in.numargs = 3;
772         req->in.args[0].size = argsize;
773         req->in.args[0].value = &inarg;
774         req->in.args[1].size = oldent->d_name.len + 1;
775         req->in.args[1].value = oldent->d_name.name;
776         req->in.args[2].size = newent->d_name.len + 1;
777         req->in.args[2].value = newent->d_name.name;
778         fuse_request_send(fc, req);
779         err = req->out.h.error;
780         fuse_put_request(fc, req);
781         if (!err) {
782                 /* ctime changes */
783                 fuse_invalidate_attr(oldent->d_inode);
784                 fuse_update_ctime(oldent->d_inode);
785
786                 if (flags & RENAME_EXCHANGE) {
787                         fuse_invalidate_attr(newent->d_inode);
788                         fuse_update_ctime(newent->d_inode);
789                 }
790
791                 fuse_invalidate_attr(olddir);
792                 if (olddir != newdir)
793                         fuse_invalidate_attr(newdir);
794
795                 /* newent will end up negative */
796                 if (!(flags & RENAME_EXCHANGE) && newent->d_inode) {
797                         fuse_invalidate_attr(newent->d_inode);
798                         fuse_invalidate_entry_cache(newent);
799                         fuse_update_ctime(newent->d_inode);
800                 }
801         } else if (err == -EINTR) {
802                 /* If request was interrupted, DEITY only knows if the
803                    rename actually took place.  If the invalidation
804                    fails (e.g. some process has CWD under the renamed
805                    directory), then there can be inconsistency between
806                    the dcache and the real filesystem.  Tough luck. */
807                 fuse_invalidate_entry(oldent);
808                 if (newent->d_inode)
809                         fuse_invalidate_entry(newent);
810         }
811
812         return err;
813 }
814
815 static int fuse_rename2(struct inode *olddir, struct dentry *oldent,
816                         struct inode *newdir, struct dentry *newent,
817                         unsigned int flags)
818 {
819         struct fuse_conn *fc = get_fuse_conn(olddir);
820         int err;
821
822         if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE))
823                 return -EINVAL;
824
825         if (flags) {
826                 if (fc->no_rename2 || fc->minor < 23)
827                         return -EINVAL;
828
829                 err = fuse_rename_common(olddir, oldent, newdir, newent, flags,
830                                          FUSE_RENAME2,
831                                          sizeof(struct fuse_rename2_in));
832                 if (err == -ENOSYS) {
833                         fc->no_rename2 = 1;
834                         err = -EINVAL;
835                 }
836         } else {
837                 err = fuse_rename_common(olddir, oldent, newdir, newent, 0,
838                                          FUSE_RENAME,
839                                          sizeof(struct fuse_rename_in));
840         }
841
842         return err;
843 }
844
845 static int fuse_link(struct dentry *entry, struct inode *newdir,
846                      struct dentry *newent)
847 {
848         int err;
849         struct fuse_link_in inarg;
850         struct inode *inode = entry->d_inode;
851         struct fuse_conn *fc = get_fuse_conn(inode);
852         struct fuse_req *req = fuse_get_req_nopages(fc);
853         if (IS_ERR(req))
854                 return PTR_ERR(req);
855
856         memset(&inarg, 0, sizeof(inarg));
857         inarg.oldnodeid = get_node_id(inode);
858         req->in.h.opcode = FUSE_LINK;
859         req->in.numargs = 2;
860         req->in.args[0].size = sizeof(inarg);
861         req->in.args[0].value = &inarg;
862         req->in.args[1].size = newent->d_name.len + 1;
863         req->in.args[1].value = newent->d_name.name;
864         err = create_new_entry(fc, req, newdir, newent, inode->i_mode);
865         /* Contrary to "normal" filesystems it can happen that link
866            makes two "logical" inodes point to the same "physical"
867            inode.  We invalidate the attributes of the old one, so it
868            will reflect changes in the backing inode (link count,
869            etc.)
870         */
871         if (!err) {
872                 struct fuse_inode *fi = get_fuse_inode(inode);
873
874                 spin_lock(&fc->lock);
875                 fi->attr_version = ++fc->attr_version;
876                 inc_nlink(inode);
877                 spin_unlock(&fc->lock);
878                 fuse_invalidate_attr(inode);
879                 fuse_update_ctime(inode);
880         } else if (err == -EINTR) {
881                 fuse_invalidate_attr(inode);
882         }
883         return err;
884 }
885
886 static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr,
887                           struct kstat *stat)
888 {
889         unsigned int blkbits;
890         struct fuse_conn *fc = get_fuse_conn(inode);
891
892         /* see the comment in fuse_change_attributes() */
893         if (fc->writeback_cache && S_ISREG(inode->i_mode)) {
894                 attr->size = i_size_read(inode);
895                 attr->mtime = inode->i_mtime.tv_sec;
896                 attr->mtimensec = inode->i_mtime.tv_nsec;
897                 attr->ctime = inode->i_ctime.tv_sec;
898                 attr->ctimensec = inode->i_ctime.tv_nsec;
899         }
900
901         stat->dev = inode->i_sb->s_dev;
902         stat->ino = attr->ino;
903         stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777);
904         stat->nlink = attr->nlink;
905         stat->uid = make_kuid(&init_user_ns, attr->uid);
906         stat->gid = make_kgid(&init_user_ns, attr->gid);
907         stat->rdev = inode->i_rdev;
908         stat->atime.tv_sec = attr->atime;
909         stat->atime.tv_nsec = attr->atimensec;
910         stat->mtime.tv_sec = attr->mtime;
911         stat->mtime.tv_nsec = attr->mtimensec;
912         stat->ctime.tv_sec = attr->ctime;
913         stat->ctime.tv_nsec = attr->ctimensec;
914         stat->size = attr->size;
915         stat->blocks = attr->blocks;
916
917         if (attr->blksize != 0)
918                 blkbits = ilog2(attr->blksize);
919         else
920                 blkbits = inode->i_sb->s_blocksize_bits;
921
922         stat->blksize = 1 << blkbits;
923 }
924
925 static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
926                            struct file *file)
927 {
928         int err;
929         struct fuse_getattr_in inarg;
930         struct fuse_attr_out outarg;
931         struct fuse_conn *fc = get_fuse_conn(inode);
932         struct fuse_req *req;
933         u64 attr_version;
934
935         req = fuse_get_req_nopages(fc);
936         if (IS_ERR(req))
937                 return PTR_ERR(req);
938
939         attr_version = fuse_get_attr_version(fc);
940
941         memset(&inarg, 0, sizeof(inarg));
942         memset(&outarg, 0, sizeof(outarg));
943         /* Directories have separate file-handle space */
944         if (file && S_ISREG(inode->i_mode)) {
945                 struct fuse_file *ff = file->private_data;
946
947                 inarg.getattr_flags |= FUSE_GETATTR_FH;
948                 inarg.fh = ff->fh;
949         }
950         req->in.h.opcode = FUSE_GETATTR;
951         req->in.h.nodeid = get_node_id(inode);
952         req->in.numargs = 1;
953         req->in.args[0].size = sizeof(inarg);
954         req->in.args[0].value = &inarg;
955         req->out.numargs = 1;
956         if (fc->minor < 9)
957                 req->out.args[0].size = FUSE_COMPAT_ATTR_OUT_SIZE;
958         else
959                 req->out.args[0].size = sizeof(outarg);
960         req->out.args[0].value = &outarg;
961         fuse_request_send(fc, req);
962         err = req->out.h.error;
963         fuse_put_request(fc, req);
964         if (!err) {
965                 if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
966                         make_bad_inode(inode);
967                         err = -EIO;
968                 } else {
969                         fuse_change_attributes(inode, &outarg.attr,
970                                                attr_timeout(&outarg),
971                                                attr_version);
972                         if (stat)
973                                 fuse_fillattr(inode, &outarg.attr, stat);
974                 }
975         }
976         return err;
977 }
978
979 int fuse_update_attributes(struct inode *inode, struct kstat *stat,
980                            struct file *file, bool *refreshed)
981 {
982         struct fuse_inode *fi = get_fuse_inode(inode);
983         int err;
984         bool r;
985
986         if (time_before64(fi->i_time, get_jiffies_64())) {
987                 r = true;
988                 err = fuse_do_getattr(inode, stat, file);
989         } else {
990                 r = false;
991                 err = 0;
992                 if (stat) {
993                         generic_fillattr(inode, stat);
994                         stat->mode = fi->orig_i_mode;
995                         stat->ino = fi->orig_ino;
996                 }
997         }
998
999         if (refreshed != NULL)
1000                 *refreshed = r;
1001
1002         return err;
1003 }
1004
1005 int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
1006                              u64 child_nodeid, struct qstr *name)
1007 {
1008         int err = -ENOTDIR;
1009         struct inode *parent;
1010         struct dentry *dir;
1011         struct dentry *entry;
1012
1013         parent = ilookup5(sb, parent_nodeid, fuse_inode_eq, &parent_nodeid);
1014         if (!parent)
1015                 return -ENOENT;
1016
1017         mutex_lock(&parent->i_mutex);
1018         if (!S_ISDIR(parent->i_mode))
1019                 goto unlock;
1020
1021         err = -ENOENT;
1022         dir = d_find_alias(parent);
1023         if (!dir)
1024                 goto unlock;
1025
1026         entry = d_lookup(dir, name);
1027         dput(dir);
1028         if (!entry)
1029                 goto unlock;
1030
1031         fuse_invalidate_attr(parent);
1032         fuse_invalidate_entry(entry);
1033
1034         if (child_nodeid != 0 && entry->d_inode) {
1035                 mutex_lock(&entry->d_inode->i_mutex);
1036                 if (get_node_id(entry->d_inode) != child_nodeid) {
1037                         err = -ENOENT;
1038                         goto badentry;
1039                 }
1040                 if (d_mountpoint(entry)) {
1041                         err = -EBUSY;
1042                         goto badentry;
1043                 }
1044                 if (S_ISDIR(entry->d_inode->i_mode)) {
1045                         shrink_dcache_parent(entry);
1046                         if (!simple_empty(entry)) {
1047                                 err = -ENOTEMPTY;
1048                                 goto badentry;
1049                         }
1050                         entry->d_inode->i_flags |= S_DEAD;
1051                 }
1052                 dont_mount(entry);
1053                 clear_nlink(entry->d_inode);
1054                 err = 0;
1055  badentry:
1056                 mutex_unlock(&entry->d_inode->i_mutex);
1057                 if (!err)
1058                         d_delete(entry);
1059         } else {
1060                 err = 0;
1061         }
1062         dput(entry);
1063
1064  unlock:
1065         mutex_unlock(&parent->i_mutex);
1066         iput(parent);
1067         return err;
1068 }
1069
1070 /*
1071  * Calling into a user-controlled filesystem gives the filesystem
1072  * daemon ptrace-like capabilities over the current process.  This
1073  * means, that the filesystem daemon is able to record the exact
1074  * filesystem operations performed, and can also control the behavior
1075  * of the requester process in otherwise impossible ways.  For example
1076  * it can delay the operation for arbitrary length of time allowing
1077  * DoS against the requester.
1078  *
1079  * For this reason only those processes can call into the filesystem,
1080  * for which the owner of the mount has ptrace privilege.  This
1081  * excludes processes started by other users, suid or sgid processes.
1082  */
1083 int fuse_allow_current_process(struct fuse_conn *fc)
1084 {
1085         const struct cred *cred;
1086
1087         if (fc->flags & FUSE_ALLOW_OTHER)
1088                 return 1;
1089
1090         cred = current_cred();
1091         if (uid_eq(cred->euid, fc->user_id) &&
1092             uid_eq(cred->suid, fc->user_id) &&
1093             uid_eq(cred->uid,  fc->user_id) &&
1094             gid_eq(cred->egid, fc->group_id) &&
1095             gid_eq(cred->sgid, fc->group_id) &&
1096             gid_eq(cred->gid,  fc->group_id))
1097                 return 1;
1098
1099         return 0;
1100 }
1101
1102 static int fuse_access(struct inode *inode, int mask)
1103 {
1104         struct fuse_conn *fc = get_fuse_conn(inode);
1105         struct fuse_req *req;
1106         struct fuse_access_in inarg;
1107         int err;
1108
1109         BUG_ON(mask & MAY_NOT_BLOCK);
1110
1111         if (fc->no_access)
1112                 return 0;
1113
1114         req = fuse_get_req_nopages(fc);
1115         if (IS_ERR(req))
1116                 return PTR_ERR(req);
1117
1118         memset(&inarg, 0, sizeof(inarg));
1119         inarg.mask = mask & (MAY_READ | MAY_WRITE | MAY_EXEC);
1120         req->in.h.opcode = FUSE_ACCESS;
1121         req->in.h.nodeid = get_node_id(inode);
1122         req->in.numargs = 1;
1123         req->in.args[0].size = sizeof(inarg);
1124         req->in.args[0].value = &inarg;
1125         fuse_request_send(fc, req);
1126         err = req->out.h.error;
1127         fuse_put_request(fc, req);
1128         if (err == -ENOSYS) {
1129                 fc->no_access = 1;
1130                 err = 0;
1131         }
1132         return err;
1133 }
1134
1135 static int fuse_perm_getattr(struct inode *inode, int mask)
1136 {
1137         if (mask & MAY_NOT_BLOCK)
1138                 return -ECHILD;
1139
1140         return fuse_do_getattr(inode, NULL, NULL);
1141 }
1142
1143 /*
1144  * Check permission.  The two basic access models of FUSE are:
1145  *
1146  * 1) Local access checking ('default_permissions' mount option) based
1147  * on file mode.  This is the plain old disk filesystem permission
1148  * modell.
1149  *
1150  * 2) "Remote" access checking, where server is responsible for
1151  * checking permission in each inode operation.  An exception to this
1152  * is if ->permission() was invoked from sys_access() in which case an
1153  * access request is sent.  Execute permission is still checked
1154  * locally based on file mode.
1155  */
1156 static int fuse_permission(struct inode *inode, int mask)
1157 {
1158         struct fuse_conn *fc = get_fuse_conn(inode);
1159         bool refreshed = false;
1160         int err = 0;
1161
1162         if (!fuse_allow_current_process(fc))
1163                 return -EACCES;
1164
1165         /*
1166          * If attributes are needed, refresh them before proceeding
1167          */
1168         if ((fc->flags & FUSE_DEFAULT_PERMISSIONS) ||
1169             ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) {
1170                 struct fuse_inode *fi = get_fuse_inode(inode);
1171
1172                 if (time_before64(fi->i_time, get_jiffies_64())) {
1173                         refreshed = true;
1174
1175                         err = fuse_perm_getattr(inode, mask);
1176                         if (err)
1177                                 return err;
1178                 }
1179         }
1180
1181         if (fc->flags & FUSE_DEFAULT_PERMISSIONS) {
1182                 err = generic_permission(inode, mask);
1183
1184                 /* If permission is denied, try to refresh file
1185                    attributes.  This is also needed, because the root
1186                    node will at first have no permissions */
1187                 if (err == -EACCES && !refreshed) {
1188                         err = fuse_perm_getattr(inode, mask);
1189                         if (!err)
1190                                 err = generic_permission(inode, mask);
1191                 }
1192
1193                 /* Note: the opposite of the above test does not
1194                    exist.  So if permissions are revoked this won't be
1195                    noticed immediately, only after the attribute
1196                    timeout has expired */
1197         } else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
1198                 err = fuse_access(inode, mask);
1199         } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
1200                 if (!(inode->i_mode & S_IXUGO)) {
1201                         if (refreshed)
1202                                 return -EACCES;
1203
1204                         err = fuse_perm_getattr(inode, mask);
1205                         if (!err && !(inode->i_mode & S_IXUGO))
1206                                 return -EACCES;
1207                 }
1208         }
1209         return err;
1210 }
1211
1212 static int parse_dirfile(char *buf, size_t nbytes, struct file *file,
1213                          struct dir_context *ctx)
1214 {
1215         while (nbytes >= FUSE_NAME_OFFSET) {
1216                 struct fuse_dirent *dirent = (struct fuse_dirent *) buf;
1217                 size_t reclen = FUSE_DIRENT_SIZE(dirent);
1218                 if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
1219                         return -EIO;
1220                 if (reclen > nbytes)
1221                         break;
1222                 if (memchr(dirent->name, '/', dirent->namelen) != NULL)
1223                         return -EIO;
1224
1225                 if (!dir_emit(ctx, dirent->name, dirent->namelen,
1226                                dirent->ino, dirent->type))
1227                         break;
1228
1229                 buf += reclen;
1230                 nbytes -= reclen;
1231                 ctx->pos = dirent->off;
1232         }
1233
1234         return 0;
1235 }
1236
1237 static int fuse_direntplus_link(struct file *file,
1238                                 struct fuse_direntplus *direntplus,
1239                                 u64 attr_version)
1240 {
1241         int err;
1242         struct fuse_entry_out *o = &direntplus->entry_out;
1243         struct fuse_dirent *dirent = &direntplus->dirent;
1244         struct dentry *parent = file->f_path.dentry;
1245         struct qstr name = QSTR_INIT(dirent->name, dirent->namelen);
1246         struct dentry *dentry;
1247         struct dentry *alias;
1248         struct inode *dir = parent->d_inode;
1249         struct fuse_conn *fc;
1250         struct inode *inode;
1251
1252         if (!o->nodeid) {
1253                 /*
1254                  * Unlike in the case of fuse_lookup, zero nodeid does not mean
1255                  * ENOENT. Instead, it only means the userspace filesystem did
1256                  * not want to return attributes/handle for this entry.
1257                  *
1258                  * So do nothing.
1259                  */
1260                 return 0;
1261         }
1262
1263         if (name.name[0] == '.') {
1264                 /*
1265                  * We could potentially refresh the attributes of the directory
1266                  * and its parent?
1267                  */
1268                 if (name.len == 1)
1269                         return 0;
1270                 if (name.name[1] == '.' && name.len == 2)
1271                         return 0;
1272         }
1273
1274         if (invalid_nodeid(o->nodeid))
1275                 return -EIO;
1276         if (!fuse_valid_type(o->attr.mode))
1277                 return -EIO;
1278
1279         fc = get_fuse_conn(dir);
1280
1281         name.hash = full_name_hash(name.name, name.len);
1282         dentry = d_lookup(parent, &name);
1283         if (dentry) {
1284                 inode = dentry->d_inode;
1285                 if (!inode) {
1286                         d_drop(dentry);
1287                 } else if (get_node_id(inode) != o->nodeid ||
1288                            ((o->attr.mode ^ inode->i_mode) & S_IFMT)) {
1289                         d_invalidate(dentry);
1290                 } else if (is_bad_inode(inode)) {
1291                         err = -EIO;
1292                         goto out;
1293                 } else {
1294                         struct fuse_inode *fi;
1295                         fi = get_fuse_inode(inode);
1296                         spin_lock(&fc->lock);
1297                         fi->nlookup++;
1298                         spin_unlock(&fc->lock);
1299
1300                         fuse_change_attributes(inode, &o->attr,
1301                                                entry_attr_timeout(o),
1302                                                attr_version);
1303
1304                         /*
1305                          * The other branch to 'found' comes via fuse_iget()
1306                          * which bumps nlookup inside
1307                          */
1308                         goto found;
1309                 }
1310                 dput(dentry);
1311         }
1312
1313         dentry = d_alloc(parent, &name);
1314         err = -ENOMEM;
1315         if (!dentry)
1316                 goto out;
1317
1318         inode = fuse_iget(dir->i_sb, o->nodeid, o->generation,
1319                           &o->attr, entry_attr_timeout(o), attr_version);
1320         if (!inode)
1321                 goto out;
1322
1323         alias = d_materialise_unique(dentry, inode);
1324         err = PTR_ERR(alias);
1325         if (IS_ERR(alias))
1326                 goto out;
1327
1328         if (alias) {
1329                 dput(dentry);
1330                 dentry = alias;
1331         }
1332
1333 found:
1334         if (fc->readdirplus_auto)
1335                 set_bit(FUSE_I_INIT_RDPLUS, &get_fuse_inode(inode)->state);
1336         fuse_change_entry_timeout(dentry, o);
1337
1338         err = 0;
1339 out:
1340         dput(dentry);
1341         return err;
1342 }
1343
1344 static int parse_dirplusfile(char *buf, size_t nbytes, struct file *file,
1345                              struct dir_context *ctx, u64 attr_version)
1346 {
1347         struct fuse_direntplus *direntplus;
1348         struct fuse_dirent *dirent;
1349         size_t reclen;
1350         int over = 0;
1351         int ret;
1352
1353         while (nbytes >= FUSE_NAME_OFFSET_DIRENTPLUS) {
1354                 direntplus = (struct fuse_direntplus *) buf;
1355                 dirent = &direntplus->dirent;
1356                 reclen = FUSE_DIRENTPLUS_SIZE(direntplus);
1357
1358                 if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
1359                         return -EIO;
1360                 if (reclen > nbytes)
1361                         break;
1362                 if (memchr(dirent->name, '/', dirent->namelen) != NULL)
1363                         return -EIO;
1364
1365                 if (!over) {
1366                         /* We fill entries into dstbuf only as much as
1367                            it can hold. But we still continue iterating
1368                            over remaining entries to link them. If not,
1369                            we need to send a FORGET for each of those
1370                            which we did not link.
1371                         */
1372                         over = !dir_emit(ctx, dirent->name, dirent->namelen,
1373                                        dirent->ino, dirent->type);
1374                         ctx->pos = dirent->off;
1375                 }
1376
1377                 buf += reclen;
1378                 nbytes -= reclen;
1379
1380                 ret = fuse_direntplus_link(file, direntplus, attr_version);
1381                 if (ret)
1382                         fuse_force_forget(file, direntplus->entry_out.nodeid);
1383         }
1384
1385         return 0;
1386 }
1387
1388 static int fuse_readdir(struct file *file, struct dir_context *ctx)
1389 {
1390         int plus, err;
1391         size_t nbytes;
1392         struct page *page;
1393         struct inode *inode = file_inode(file);
1394         struct fuse_conn *fc = get_fuse_conn(inode);
1395         struct fuse_req *req;
1396         u64 attr_version = 0;
1397
1398         if (is_bad_inode(inode))
1399                 return -EIO;
1400
1401         req = fuse_get_req(fc, 1);
1402         if (IS_ERR(req))
1403                 return PTR_ERR(req);
1404
1405         page = alloc_page(GFP_KERNEL);
1406         if (!page) {
1407                 fuse_put_request(fc, req);
1408                 return -ENOMEM;
1409         }
1410
1411         plus = fuse_use_readdirplus(inode, ctx);
1412         req->out.argpages = 1;
1413         req->num_pages = 1;
1414         req->pages[0] = page;
1415         req->page_descs[0].length = PAGE_SIZE;
1416         if (plus) {
1417                 attr_version = fuse_get_attr_version(fc);
1418                 fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
1419                                FUSE_READDIRPLUS);
1420         } else {
1421                 fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
1422                                FUSE_READDIR);
1423         }
1424         fuse_request_send(fc, req);
1425         nbytes = req->out.args[0].size;
1426         err = req->out.h.error;
1427         fuse_put_request(fc, req);
1428         if (!err) {
1429                 if (plus) {
1430                         err = parse_dirplusfile(page_address(page), nbytes,
1431                                                 file, ctx,
1432                                                 attr_version);
1433                 } else {
1434                         err = parse_dirfile(page_address(page), nbytes, file,
1435                                             ctx);
1436                 }
1437         }
1438
1439         __free_page(page);
1440         fuse_invalidate_atime(inode);
1441         return err;
1442 }
1443
1444 static char *read_link(struct dentry *dentry)
1445 {
1446         struct inode *inode = dentry->d_inode;
1447         struct fuse_conn *fc = get_fuse_conn(inode);
1448         struct fuse_req *req = fuse_get_req_nopages(fc);
1449         char *link;
1450
1451         if (IS_ERR(req))
1452                 return ERR_CAST(req);
1453
1454         link = (char *) __get_free_page(GFP_KERNEL);
1455         if (!link) {
1456                 link = ERR_PTR(-ENOMEM);
1457                 goto out;
1458         }
1459         req->in.h.opcode = FUSE_READLINK;
1460         req->in.h.nodeid = get_node_id(inode);
1461         req->out.argvar = 1;
1462         req->out.numargs = 1;
1463         req->out.args[0].size = PAGE_SIZE - 1;
1464         req->out.args[0].value = link;
1465         fuse_request_send(fc, req);
1466         if (req->out.h.error) {
1467                 free_page((unsigned long) link);
1468                 link = ERR_PTR(req->out.h.error);
1469         } else
1470                 link[req->out.args[0].size] = '\0';
1471  out:
1472         fuse_put_request(fc, req);
1473         fuse_invalidate_atime(inode);
1474         return link;
1475 }
1476
1477 static void free_link(char *link)
1478 {
1479         if (!IS_ERR(link))
1480                 free_page((unsigned long) link);
1481 }
1482
1483 static void *fuse_follow_link(struct dentry *dentry, struct nameidata *nd)
1484 {
1485         nd_set_link(nd, read_link(dentry));
1486         return NULL;
1487 }
1488
1489 static void fuse_put_link(struct dentry *dentry, struct nameidata *nd, void *c)
1490 {
1491         free_link(nd_get_link(nd));
1492 }
1493
1494 static int fuse_dir_open(struct inode *inode, struct file *file)
1495 {
1496         return fuse_open_common(inode, file, true);
1497 }
1498
1499 static int fuse_dir_release(struct inode *inode, struct file *file)
1500 {
1501         fuse_release_common(file, FUSE_RELEASEDIR);
1502
1503         return 0;
1504 }
1505
1506 static int fuse_dir_fsync(struct file *file, loff_t start, loff_t end,
1507                           int datasync)
1508 {
1509         return fuse_fsync_common(file, start, end, datasync, 1);
1510 }
1511
1512 static long fuse_dir_ioctl(struct file *file, unsigned int cmd,
1513                             unsigned long arg)
1514 {
1515         struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1516
1517         /* FUSE_IOCTL_DIR only supported for API version >= 7.18 */
1518         if (fc->minor < 18)
1519                 return -ENOTTY;
1520
1521         return fuse_ioctl_common(file, cmd, arg, FUSE_IOCTL_DIR);
1522 }
1523
1524 static long fuse_dir_compat_ioctl(struct file *file, unsigned int cmd,
1525                                    unsigned long arg)
1526 {
1527         struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1528
1529         if (fc->minor < 18)
1530                 return -ENOTTY;
1531
1532         return fuse_ioctl_common(file, cmd, arg,
1533                                  FUSE_IOCTL_COMPAT | FUSE_IOCTL_DIR);
1534 }
1535
1536 static bool update_mtime(unsigned ivalid, bool trust_local_mtime)
1537 {
1538         /* Always update if mtime is explicitly set  */
1539         if (ivalid & ATTR_MTIME_SET)
1540                 return true;
1541
1542         /* Or if kernel i_mtime is the official one */
1543         if (trust_local_mtime)
1544                 return true;
1545
1546         /* If it's an open(O_TRUNC) or an ftruncate(), don't update */
1547         if ((ivalid & ATTR_SIZE) && (ivalid & (ATTR_OPEN | ATTR_FILE)))
1548                 return false;
1549
1550         /* In all other cases update */
1551         return true;
1552 }
1553
1554 static void iattr_to_fattr(struct iattr *iattr, struct fuse_setattr_in *arg,
1555                            bool trust_local_cmtime)
1556 {
1557         unsigned ivalid = iattr->ia_valid;
1558
1559         if (ivalid & ATTR_MODE)
1560                 arg->valid |= FATTR_MODE,   arg->mode = iattr->ia_mode;
1561         if (ivalid & ATTR_UID)
1562                 arg->valid |= FATTR_UID,    arg->uid = from_kuid(&init_user_ns, iattr->ia_uid);
1563         if (ivalid & ATTR_GID)
1564                 arg->valid |= FATTR_GID,    arg->gid = from_kgid(&init_user_ns, iattr->ia_gid);
1565         if (ivalid & ATTR_SIZE)
1566                 arg->valid |= FATTR_SIZE,   arg->size = iattr->ia_size;
1567         if (ivalid & ATTR_ATIME) {
1568                 arg->valid |= FATTR_ATIME;
1569                 arg->atime = iattr->ia_atime.tv_sec;
1570                 arg->atimensec = iattr->ia_atime.tv_nsec;
1571                 if (!(ivalid & ATTR_ATIME_SET))
1572                         arg->valid |= FATTR_ATIME_NOW;
1573         }
1574         if ((ivalid & ATTR_MTIME) && update_mtime(ivalid, trust_local_cmtime)) {
1575                 arg->valid |= FATTR_MTIME;
1576                 arg->mtime = iattr->ia_mtime.tv_sec;
1577                 arg->mtimensec = iattr->ia_mtime.tv_nsec;
1578                 if (!(ivalid & ATTR_MTIME_SET) && !trust_local_cmtime)
1579                         arg->valid |= FATTR_MTIME_NOW;
1580         }
1581         if ((ivalid & ATTR_CTIME) && trust_local_cmtime) {
1582                 arg->valid |= FATTR_CTIME;
1583                 arg->ctime = iattr->ia_ctime.tv_sec;
1584                 arg->ctimensec = iattr->ia_ctime.tv_nsec;
1585         }
1586 }
1587
1588 /*
1589  * Prevent concurrent writepages on inode
1590  *
1591  * This is done by adding a negative bias to the inode write counter
1592  * and waiting for all pending writes to finish.
1593  */
1594 void fuse_set_nowrite(struct inode *inode)
1595 {
1596         struct fuse_conn *fc = get_fuse_conn(inode);
1597         struct fuse_inode *fi = get_fuse_inode(inode);
1598
1599         BUG_ON(!mutex_is_locked(&inode->i_mutex));
1600
1601         spin_lock(&fc->lock);
1602         BUG_ON(fi->writectr < 0);
1603         fi->writectr += FUSE_NOWRITE;
1604         spin_unlock(&fc->lock);
1605         wait_event(fi->page_waitq, fi->writectr == FUSE_NOWRITE);
1606 }
1607
1608 /*
1609  * Allow writepages on inode
1610  *
1611  * Remove the bias from the writecounter and send any queued
1612  * writepages.
1613  */
1614 static void __fuse_release_nowrite(struct inode *inode)
1615 {
1616         struct fuse_inode *fi = get_fuse_inode(inode);
1617
1618         BUG_ON(fi->writectr != FUSE_NOWRITE);
1619         fi->writectr = 0;
1620         fuse_flush_writepages(inode);
1621 }
1622
1623 void fuse_release_nowrite(struct inode *inode)
1624 {
1625         struct fuse_conn *fc = get_fuse_conn(inode);
1626
1627         spin_lock(&fc->lock);
1628         __fuse_release_nowrite(inode);
1629         spin_unlock(&fc->lock);
1630 }
1631
1632 static void fuse_setattr_fill(struct fuse_conn *fc, struct fuse_req *req,
1633                               struct inode *inode,
1634                               struct fuse_setattr_in *inarg_p,
1635                               struct fuse_attr_out *outarg_p)
1636 {
1637         req->in.h.opcode = FUSE_SETATTR;
1638         req->in.h.nodeid = get_node_id(inode);
1639         req->in.numargs = 1;
1640         req->in.args[0].size = sizeof(*inarg_p);
1641         req->in.args[0].value = inarg_p;
1642         req->out.numargs = 1;
1643         if (fc->minor < 9)
1644                 req->out.args[0].size = FUSE_COMPAT_ATTR_OUT_SIZE;
1645         else
1646                 req->out.args[0].size = sizeof(*outarg_p);
1647         req->out.args[0].value = outarg_p;
1648 }
1649
1650 /*
1651  * Flush inode->i_mtime to the server
1652  */
1653 int fuse_flush_times(struct inode *inode, struct fuse_file *ff)
1654 {
1655         struct fuse_conn *fc = get_fuse_conn(inode);
1656         struct fuse_req *req;
1657         struct fuse_setattr_in inarg;
1658         struct fuse_attr_out outarg;
1659         int err;
1660
1661         req = fuse_get_req_nopages(fc);
1662         if (IS_ERR(req))
1663                 return PTR_ERR(req);
1664
1665         memset(&inarg, 0, sizeof(inarg));
1666         memset(&outarg, 0, sizeof(outarg));
1667
1668         inarg.valid = FATTR_MTIME;
1669         inarg.mtime = inode->i_mtime.tv_sec;
1670         inarg.mtimensec = inode->i_mtime.tv_nsec;
1671         if (fc->minor >= 23) {
1672                 inarg.valid |= FATTR_CTIME;
1673                 inarg.ctime = inode->i_ctime.tv_sec;
1674                 inarg.ctimensec = inode->i_ctime.tv_nsec;
1675         }
1676         if (ff) {
1677                 inarg.valid |= FATTR_FH;
1678                 inarg.fh = ff->fh;
1679         }
1680         fuse_setattr_fill(fc, req, inode, &inarg, &outarg);
1681         fuse_request_send(fc, req);
1682         err = req->out.h.error;
1683         fuse_put_request(fc, req);
1684
1685         return err;
1686 }
1687
1688 /*
1689  * Set attributes, and at the same time refresh them.
1690  *
1691  * Truncation is slightly complicated, because the 'truncate' request
1692  * may fail, in which case we don't want to touch the mapping.
1693  * vmtruncate() doesn't allow for this case, so do the rlimit checking
1694  * and the actual truncation by hand.
1695  */
1696 int fuse_do_setattr(struct inode *inode, struct iattr *attr,
1697                     struct file *file)
1698 {
1699         struct fuse_conn *fc = get_fuse_conn(inode);
1700         struct fuse_inode *fi = get_fuse_inode(inode);
1701         struct fuse_req *req;
1702         struct fuse_setattr_in inarg;
1703         struct fuse_attr_out outarg;
1704         bool is_truncate = false;
1705         bool is_wb = fc->writeback_cache;
1706         loff_t oldsize;
1707         int err;
1708         bool trust_local_cmtime = is_wb && S_ISREG(inode->i_mode);
1709
1710         if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS))
1711                 attr->ia_valid |= ATTR_FORCE;
1712
1713         err = inode_change_ok(inode, attr);
1714         if (err)
1715                 return err;
1716
1717         if (attr->ia_valid & ATTR_OPEN) {
1718                 if (fc->atomic_o_trunc)
1719                         return 0;
1720                 file = NULL;
1721         }
1722
1723         if (attr->ia_valid & ATTR_SIZE)
1724                 is_truncate = true;
1725
1726         req = fuse_get_req_nopages(fc);
1727         if (IS_ERR(req))
1728                 return PTR_ERR(req);
1729
1730         if (is_truncate) {
1731                 fuse_set_nowrite(inode);
1732                 set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1733                 if (trust_local_cmtime && attr->ia_size != inode->i_size)
1734                         attr->ia_valid |= ATTR_MTIME | ATTR_CTIME;
1735         }
1736
1737         memset(&inarg, 0, sizeof(inarg));
1738         memset(&outarg, 0, sizeof(outarg));
1739         iattr_to_fattr(attr, &inarg, trust_local_cmtime);
1740         if (file) {
1741                 struct fuse_file *ff = file->private_data;
1742                 inarg.valid |= FATTR_FH;
1743                 inarg.fh = ff->fh;
1744         }
1745         if (attr->ia_valid & ATTR_SIZE) {
1746                 /* For mandatory locking in truncate */
1747                 inarg.valid |= FATTR_LOCKOWNER;
1748                 inarg.lock_owner = fuse_lock_owner_id(fc, current->files);
1749         }
1750         fuse_setattr_fill(fc, req, inode, &inarg, &outarg);
1751         fuse_request_send(fc, req);
1752         err = req->out.h.error;
1753         fuse_put_request(fc, req);
1754         if (err) {
1755                 if (err == -EINTR)
1756                         fuse_invalidate_attr(inode);
1757                 goto error;
1758         }
1759
1760         if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
1761                 make_bad_inode(inode);
1762                 err = -EIO;
1763                 goto error;
1764         }
1765
1766         spin_lock(&fc->lock);
1767         /* the kernel maintains i_mtime locally */
1768         if (trust_local_cmtime) {
1769                 if (attr->ia_valid & ATTR_MTIME)
1770                         inode->i_mtime = attr->ia_mtime;
1771                 if (attr->ia_valid & ATTR_CTIME)
1772                         inode->i_ctime = attr->ia_ctime;
1773                 /* FIXME: clear I_DIRTY_SYNC? */
1774         }
1775
1776         fuse_change_attributes_common(inode, &outarg.attr,
1777                                       attr_timeout(&outarg));
1778         oldsize = inode->i_size;
1779         /* see the comment in fuse_change_attributes() */
1780         if (!is_wb || is_truncate || !S_ISREG(inode->i_mode))
1781                 i_size_write(inode, outarg.attr.size);
1782
1783         if (is_truncate) {
1784                 /* NOTE: this may release/reacquire fc->lock */
1785                 __fuse_release_nowrite(inode);
1786         }
1787         spin_unlock(&fc->lock);
1788
1789         /*
1790          * Only call invalidate_inode_pages2() after removing
1791          * FUSE_NOWRITE, otherwise fuse_launder_page() would deadlock.
1792          */
1793         if ((is_truncate || !is_wb) &&
1794             S_ISREG(inode->i_mode) && oldsize != outarg.attr.size) {
1795                 truncate_pagecache(inode, outarg.attr.size);
1796                 invalidate_inode_pages2(inode->i_mapping);
1797         }
1798
1799         clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1800         return 0;
1801
1802 error:
1803         if (is_truncate)
1804                 fuse_release_nowrite(inode);
1805
1806         clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1807         return err;
1808 }
1809
1810 static int fuse_setattr(struct dentry *entry, struct iattr *attr)
1811 {
1812         struct inode *inode = entry->d_inode;
1813
1814         if (!fuse_allow_current_process(get_fuse_conn(inode)))
1815                 return -EACCES;
1816
1817         if (attr->ia_valid & ATTR_FILE)
1818                 return fuse_do_setattr(inode, attr, attr->ia_file);
1819         else
1820                 return fuse_do_setattr(inode, attr, NULL);
1821 }
1822
1823 static int fuse_getattr(struct vfsmount *mnt, struct dentry *entry,
1824                         struct kstat *stat)
1825 {
1826         struct inode *inode = entry->d_inode;
1827         struct fuse_conn *fc = get_fuse_conn(inode);
1828
1829         if (!fuse_allow_current_process(fc))
1830                 return -EACCES;
1831
1832         return fuse_update_attributes(inode, stat, NULL, NULL);
1833 }
1834
1835 static int fuse_setxattr(struct dentry *entry, const char *name,
1836                          const void *value, size_t size, int flags)
1837 {
1838         struct inode *inode = entry->d_inode;
1839         struct fuse_conn *fc = get_fuse_conn(inode);
1840         struct fuse_req *req;
1841         struct fuse_setxattr_in inarg;
1842         int err;
1843
1844         if (fc->no_setxattr)
1845                 return -EOPNOTSUPP;
1846
1847         req = fuse_get_req_nopages(fc);
1848         if (IS_ERR(req))
1849                 return PTR_ERR(req);
1850
1851         memset(&inarg, 0, sizeof(inarg));
1852         inarg.size = size;
1853         inarg.flags = flags;
1854         req->in.h.opcode = FUSE_SETXATTR;
1855         req->in.h.nodeid = get_node_id(inode);
1856         req->in.numargs = 3;
1857         req->in.args[0].size = sizeof(inarg);
1858         req->in.args[0].value = &inarg;
1859         req->in.args[1].size = strlen(name) + 1;
1860         req->in.args[1].value = name;
1861         req->in.args[2].size = size;
1862         req->in.args[2].value = value;
1863         fuse_request_send(fc, req);
1864         err = req->out.h.error;
1865         fuse_put_request(fc, req);
1866         if (err == -ENOSYS) {
1867                 fc->no_setxattr = 1;
1868                 err = -EOPNOTSUPP;
1869         }
1870         if (!err) {
1871                 fuse_invalidate_attr(inode);
1872                 fuse_update_ctime(inode);
1873         }
1874         return err;
1875 }
1876
1877 static ssize_t fuse_getxattr(struct dentry *entry, const char *name,
1878                              void *value, size_t size)
1879 {
1880         struct inode *inode = entry->d_inode;
1881         struct fuse_conn *fc = get_fuse_conn(inode);
1882         struct fuse_req *req;
1883         struct fuse_getxattr_in inarg;
1884         struct fuse_getxattr_out outarg;
1885         ssize_t ret;
1886
1887         if (fc->no_getxattr)
1888                 return -EOPNOTSUPP;
1889
1890         req = fuse_get_req_nopages(fc);
1891         if (IS_ERR(req))
1892                 return PTR_ERR(req);
1893
1894         memset(&inarg, 0, sizeof(inarg));
1895         inarg.size = size;
1896         req->in.h.opcode = FUSE_GETXATTR;
1897         req->in.h.nodeid = get_node_id(inode);
1898         req->in.numargs = 2;
1899         req->in.args[0].size = sizeof(inarg);
1900         req->in.args[0].value = &inarg;
1901         req->in.args[1].size = strlen(name) + 1;
1902         req->in.args[1].value = name;
1903         /* This is really two different operations rolled into one */
1904         req->out.numargs = 1;
1905         if (size) {
1906                 req->out.argvar = 1;
1907                 req->out.args[0].size = size;
1908                 req->out.args[0].value = value;
1909         } else {
1910                 req->out.args[0].size = sizeof(outarg);
1911                 req->out.args[0].value = &outarg;
1912         }
1913         fuse_request_send(fc, req);
1914         ret = req->out.h.error;
1915         if (!ret)
1916                 ret = size ? req->out.args[0].size : outarg.size;
1917         else {
1918                 if (ret == -ENOSYS) {
1919                         fc->no_getxattr = 1;
1920                         ret = -EOPNOTSUPP;
1921                 }
1922         }
1923         fuse_put_request(fc, req);
1924         return ret;
1925 }
1926
1927 static ssize_t fuse_listxattr(struct dentry *entry, char *list, size_t size)
1928 {
1929         struct inode *inode = entry->d_inode;
1930         struct fuse_conn *fc = get_fuse_conn(inode);
1931         struct fuse_req *req;
1932         struct fuse_getxattr_in inarg;
1933         struct fuse_getxattr_out outarg;
1934         ssize_t ret;
1935
1936         if (!fuse_allow_current_process(fc))
1937                 return -EACCES;
1938
1939         if (fc->no_listxattr)
1940                 return -EOPNOTSUPP;
1941
1942         req = fuse_get_req_nopages(fc);
1943         if (IS_ERR(req))
1944                 return PTR_ERR(req);
1945
1946         memset(&inarg, 0, sizeof(inarg));
1947         inarg.size = size;
1948         req->in.h.opcode = FUSE_LISTXATTR;
1949         req->in.h.nodeid = get_node_id(inode);
1950         req->in.numargs = 1;
1951         req->in.args[0].size = sizeof(inarg);
1952         req->in.args[0].value = &inarg;
1953         /* This is really two different operations rolled into one */
1954         req->out.numargs = 1;
1955         if (size) {
1956                 req->out.argvar = 1;
1957                 req->out.args[0].size = size;
1958                 req->out.args[0].value = list;
1959         } else {
1960                 req->out.args[0].size = sizeof(outarg);
1961                 req->out.args[0].value = &outarg;
1962         }
1963         fuse_request_send(fc, req);
1964         ret = req->out.h.error;
1965         if (!ret)
1966                 ret = size ? req->out.args[0].size : outarg.size;
1967         else {
1968                 if (ret == -ENOSYS) {
1969                         fc->no_listxattr = 1;
1970                         ret = -EOPNOTSUPP;
1971                 }
1972         }
1973         fuse_put_request(fc, req);
1974         return ret;
1975 }
1976
1977 static int fuse_removexattr(struct dentry *entry, const char *name)
1978 {
1979         struct inode *inode = entry->d_inode;
1980         struct fuse_conn *fc = get_fuse_conn(inode);
1981         struct fuse_req *req;
1982         int err;
1983
1984         if (fc->no_removexattr)
1985                 return -EOPNOTSUPP;
1986
1987         req = fuse_get_req_nopages(fc);
1988         if (IS_ERR(req))
1989                 return PTR_ERR(req);
1990
1991         req->in.h.opcode = FUSE_REMOVEXATTR;
1992         req->in.h.nodeid = get_node_id(inode);
1993         req->in.numargs = 1;
1994         req->in.args[0].size = strlen(name) + 1;
1995         req->in.args[0].value = name;
1996         fuse_request_send(fc, req);
1997         err = req->out.h.error;
1998         fuse_put_request(fc, req);
1999         if (err == -ENOSYS) {
2000                 fc->no_removexattr = 1;
2001                 err = -EOPNOTSUPP;
2002         }
2003         if (!err) {
2004                 fuse_invalidate_attr(inode);
2005                 fuse_update_ctime(inode);
2006         }
2007         return err;
2008 }
2009
2010 static const struct inode_operations fuse_dir_inode_operations = {
2011         .lookup         = fuse_lookup,
2012         .mkdir          = fuse_mkdir,
2013         .symlink        = fuse_symlink,
2014         .unlink         = fuse_unlink,
2015         .rmdir          = fuse_rmdir,
2016         .rename2        = fuse_rename2,
2017         .link           = fuse_link,
2018         .setattr        = fuse_setattr,
2019         .create         = fuse_create,
2020         .atomic_open    = fuse_atomic_open,
2021         .mknod          = fuse_mknod,
2022         .permission     = fuse_permission,
2023         .getattr        = fuse_getattr,
2024         .setxattr       = fuse_setxattr,
2025         .getxattr       = fuse_getxattr,
2026         .listxattr      = fuse_listxattr,
2027         .removexattr    = fuse_removexattr,
2028 };
2029
2030 static const struct file_operations fuse_dir_operations = {
2031         .llseek         = generic_file_llseek,
2032         .read           = generic_read_dir,
2033         .iterate        = fuse_readdir,
2034         .open           = fuse_dir_open,
2035         .release        = fuse_dir_release,
2036         .fsync          = fuse_dir_fsync,
2037         .unlocked_ioctl = fuse_dir_ioctl,
2038         .compat_ioctl   = fuse_dir_compat_ioctl,
2039 };
2040
2041 static const struct inode_operations fuse_common_inode_operations = {
2042         .setattr        = fuse_setattr,
2043         .permission     = fuse_permission,
2044         .getattr        = fuse_getattr,
2045         .setxattr       = fuse_setxattr,
2046         .getxattr       = fuse_getxattr,
2047         .listxattr      = fuse_listxattr,
2048         .removexattr    = fuse_removexattr,
2049 };
2050
2051 static const struct inode_operations fuse_symlink_inode_operations = {
2052         .setattr        = fuse_setattr,
2053         .follow_link    = fuse_follow_link,
2054         .put_link       = fuse_put_link,
2055         .readlink       = generic_readlink,
2056         .getattr        = fuse_getattr,
2057         .setxattr       = fuse_setxattr,
2058         .getxattr       = fuse_getxattr,
2059         .listxattr      = fuse_listxattr,
2060         .removexattr    = fuse_removexattr,
2061 };
2062
2063 void fuse_init_common(struct inode *inode)
2064 {
2065         inode->i_op = &fuse_common_inode_operations;
2066 }
2067
2068 void fuse_init_dir(struct inode *inode)
2069 {
2070         inode->i_op = &fuse_dir_inode_operations;
2071         inode->i_fop = &fuse_dir_operations;
2072 }
2073
2074 void fuse_init_symlink(struct inode *inode)
2075 {
2076         inode->i_op = &fuse_symlink_inode_operations;
2077 }