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