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