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