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