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.
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)
24 if (!fc->readdirplus_auto)
26 if (test_and_clear_bit(FUSE_I_ADVISE_RDPLUS, &fi->state))
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)
46 static inline u64 fuse_dentry_time(struct dentry *entry)
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)
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);
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)
79 struct timespec ts = {sec, nsec};
80 return get_jiffies_64() + timespec_to_jiffies(&ts);
86 * Set dentry and possibly attribute timeouts from the lookup/mk*
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 * 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
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
123 void fuse_invalidate_entry_cache(struct dentry *entry)
125 fuse_dentry_settime(entry, 0);
129 * Same as fuse_invalidate_entry_cache(), but also try to remove the
130 * dentry from the hash
132 static void fuse_invalidate_entry(struct dentry *entry)
135 fuse_invalidate_entry_cache(entry);
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)
142 memset(outarg, 0, sizeof(struct fuse_entry_out));
143 req->in.h.opcode = FUSE_LOOKUP;
144 req->in.h.nodeid = nodeid;
146 req->in.args[0].size = name->len + 1;
147 req->in.args[0].value = name->name;
148 req->out.numargs = 1;
150 req->out.args[0].size = FUSE_COMPAT_ENTRY_OUT_SIZE;
152 req->out.args[0].size = sizeof(struct fuse_entry_out);
153 req->out.args[0].value = outarg;
156 u64 fuse_get_attr_version(struct fuse_conn *fc)
161 * The spin lock isn't actually needed on 64bit archs, but we
162 * don't yet care too much about such optimizations.
164 spin_lock(&fc->lock);
165 curr_version = fc->attr_version;
166 spin_unlock(&fc->lock);
172 * Check whether the dentry is still valid
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.
180 static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)
183 struct dentry *parent;
184 struct fuse_conn *fc;
187 inode = ACCESS_ONCE(entry->d_inode);
188 if (inode && is_bad_inode(inode))
190 else if (fuse_dentry_time(entry) < get_jiffies_64()) {
192 struct fuse_entry_out outarg;
193 struct fuse_req *req;
194 struct fuse_forget_link *forget;
197 /* For negative dentries, always do a fresh lookup */
202 if (flags & LOOKUP_RCU)
205 fc = get_fuse_conn(inode);
206 req = fuse_get_req_nopages(fc);
211 forget = fuse_alloc_forget();
213 fuse_put_request(fc, req);
218 attr_version = fuse_get_attr_version(fc);
220 parent = dget_parent(entry);
221 fuse_lookup_init(fc, req, get_node_id(parent->d_inode),
222 &entry->d_name, &outarg);
223 fuse_request_send(fc, req);
225 err = req->out.h.error;
226 fuse_put_request(fc, req);
227 /* Zero nodeid is same as -ENOENT */
228 if (!err && !outarg.nodeid)
231 struct fuse_inode *fi = get_fuse_inode(inode);
232 if (outarg.nodeid != get_node_id(inode)) {
233 fuse_queue_forget(fc, forget, outarg.nodeid, 1);
236 spin_lock(&fc->lock);
238 spin_unlock(&fc->lock);
241 if (err || (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
244 fuse_change_attributes(inode, &outarg.attr,
245 entry_attr_timeout(&outarg),
247 fuse_change_entry_timeout(entry, &outarg);
249 fc = get_fuse_conn(inode);
250 if (fc->readdirplus_auto) {
251 parent = dget_parent(entry);
252 fuse_advise_use_readdirplus(parent->d_inode);
262 shrink_submounts_and_drop(entry);
266 static int invalid_nodeid(u64 nodeid)
268 return !nodeid || nodeid == FUSE_ROOT_ID;
271 const struct dentry_operations fuse_dentry_operations = {
272 .d_revalidate = fuse_dentry_revalidate,
275 int fuse_valid_type(int m)
277 return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) ||
278 S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
281 int fuse_lookup_name(struct super_block *sb, u64 nodeid, struct qstr *name,
282 struct fuse_entry_out *outarg, struct inode **inode)
284 struct fuse_conn *fc = get_fuse_conn_super(sb);
285 struct fuse_req *req;
286 struct fuse_forget_link *forget;
292 if (name->len > FUSE_NAME_MAX)
295 req = fuse_get_req_nopages(fc);
300 forget = fuse_alloc_forget();
303 fuse_put_request(fc, req);
307 attr_version = fuse_get_attr_version(fc);
309 fuse_lookup_init(fc, req, nodeid, name, outarg);
310 fuse_request_send(fc, req);
311 err = req->out.h.error;
312 fuse_put_request(fc, req);
313 /* Zero nodeid is same as -ENOENT, but with valid timeout */
314 if (err || !outarg->nodeid)
320 if (!fuse_valid_type(outarg->attr.mode))
323 *inode = fuse_iget(sb, outarg->nodeid, outarg->generation,
324 &outarg->attr, entry_attr_timeout(outarg),
328 fuse_queue_forget(fc, forget, outarg->nodeid, 1);
339 static struct dentry *fuse_materialise_dentry(struct dentry *dentry,
342 struct dentry *newent;
344 if (inode && S_ISDIR(inode->i_mode)) {
345 struct fuse_conn *fc = get_fuse_conn(inode);
347 mutex_lock(&fc->inst_mutex);
348 newent = d_materialise_unique(dentry, inode);
349 mutex_unlock(&fc->inst_mutex);
351 newent = d_materialise_unique(dentry, inode);
357 static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
361 struct fuse_entry_out outarg;
363 struct dentry *newent;
364 bool outarg_valid = true;
366 err = fuse_lookup_name(dir->i_sb, get_node_id(dir), &entry->d_name,
368 if (err == -ENOENT) {
369 outarg_valid = false;
376 if (inode && get_node_id(inode) == FUSE_ROOT_ID)
379 newent = fuse_materialise_dentry(entry, inode);
380 err = PTR_ERR(newent);
384 entry = newent ? newent : entry;
386 fuse_change_entry_timeout(entry, &outarg);
388 fuse_invalidate_entry_cache(entry);
390 fuse_advise_use_readdirplus(dir);
400 * Atomic create+open operation
402 * If the filesystem doesn't support this, then fall back to separate
403 * 'mknod' + 'open' requests.
405 static int fuse_create_open(struct inode *dir, struct dentry *entry,
406 struct file *file, unsigned flags,
407 umode_t mode, int *opened)
411 struct fuse_conn *fc = get_fuse_conn(dir);
412 struct fuse_req *req;
413 struct fuse_forget_link *forget;
414 struct fuse_create_in inarg;
415 struct fuse_open_out outopen;
416 struct fuse_entry_out outentry;
417 struct fuse_file *ff;
419 /* Userspace expects S_IFREG in create mode */
420 BUG_ON((mode & S_IFMT) != S_IFREG);
422 forget = fuse_alloc_forget();
427 req = fuse_get_req_nopages(fc);
430 goto out_put_forget_req;
433 ff = fuse_file_alloc(fc);
435 goto out_put_request;
438 mode &= ~current_umask();
441 memset(&inarg, 0, sizeof(inarg));
442 memset(&outentry, 0, sizeof(outentry));
445 inarg.umask = current_umask();
446 req->in.h.opcode = FUSE_CREATE;
447 req->in.h.nodeid = get_node_id(dir);
449 req->in.args[0].size = fc->minor < 12 ? sizeof(struct fuse_open_in) :
451 req->in.args[0].value = &inarg;
452 req->in.args[1].size = entry->d_name.len + 1;
453 req->in.args[1].value = entry->d_name.name;
454 req->out.numargs = 2;
456 req->out.args[0].size = FUSE_COMPAT_ENTRY_OUT_SIZE;
458 req->out.args[0].size = sizeof(outentry);
459 req->out.args[0].value = &outentry;
460 req->out.args[1].size = sizeof(outopen);
461 req->out.args[1].value = &outopen;
462 fuse_request_send(fc, req);
463 err = req->out.h.error;
468 if (!S_ISREG(outentry.attr.mode) || invalid_nodeid(outentry.nodeid))
471 fuse_put_request(fc, req);
473 ff->nodeid = outentry.nodeid;
474 ff->open_flags = outopen.open_flags;
475 inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation,
476 &outentry.attr, entry_attr_timeout(&outentry), 0);
478 flags &= ~(O_CREAT | O_EXCL | O_TRUNC);
479 fuse_sync_release(ff, flags);
480 fuse_queue_forget(fc, forget, outentry.nodeid, 1);
485 d_instantiate(entry, inode);
486 fuse_change_entry_timeout(entry, &outentry);
487 fuse_invalidate_attr(dir);
488 err = finish_open(file, entry, generic_file_open, opened);
490 fuse_sync_release(ff, flags);
492 file->private_data = fuse_file_get(ff);
493 fuse_finish_open(inode, file);
500 fuse_put_request(fc, req);
507 static int fuse_mknod(struct inode *, struct dentry *, umode_t, dev_t);
508 static int fuse_atomic_open(struct inode *dir, struct dentry *entry,
509 struct file *file, unsigned flags,
510 umode_t mode, int *opened)
513 struct fuse_conn *fc = get_fuse_conn(dir);
514 struct dentry *res = NULL;
516 if (d_unhashed(entry)) {
517 res = fuse_lookup(dir, entry, 0);
525 if (!(flags & O_CREAT) || entry->d_inode)
529 *opened |= FILE_CREATED;
534 err = fuse_create_open(dir, entry, file, flags, mode, opened);
535 if (err == -ENOSYS) {
544 err = fuse_mknod(dir, entry, mode, 0);
548 return finish_no_open(file, res);
552 * Code shared between mknod, mkdir, symlink and link
554 static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req,
555 struct inode *dir, struct dentry *entry,
558 struct fuse_entry_out outarg;
561 struct fuse_forget_link *forget;
563 forget = fuse_alloc_forget();
565 fuse_put_request(fc, req);
569 memset(&outarg, 0, sizeof(outarg));
570 req->in.h.nodeid = get_node_id(dir);
571 req->out.numargs = 1;
573 req->out.args[0].size = FUSE_COMPAT_ENTRY_OUT_SIZE;
575 req->out.args[0].size = sizeof(outarg);
576 req->out.args[0].value = &outarg;
577 fuse_request_send(fc, req);
578 err = req->out.h.error;
579 fuse_put_request(fc, req);
581 goto out_put_forget_req;
584 if (invalid_nodeid(outarg.nodeid))
585 goto out_put_forget_req;
587 if ((outarg.attr.mode ^ mode) & S_IFMT)
588 goto out_put_forget_req;
590 inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
591 &outarg.attr, entry_attr_timeout(&outarg), 0);
593 fuse_queue_forget(fc, forget, outarg.nodeid, 1);
598 if (S_ISDIR(inode->i_mode)) {
599 struct dentry *alias;
600 mutex_lock(&fc->inst_mutex);
601 alias = d_find_alias(inode);
603 /* New directory must have moved since mkdir */
604 mutex_unlock(&fc->inst_mutex);
609 d_instantiate(entry, inode);
610 mutex_unlock(&fc->inst_mutex);
612 d_instantiate(entry, inode);
614 fuse_change_entry_timeout(entry, &outarg);
615 fuse_invalidate_attr(dir);
623 static int fuse_mknod(struct inode *dir, struct dentry *entry, umode_t mode,
626 struct fuse_mknod_in inarg;
627 struct fuse_conn *fc = get_fuse_conn(dir);
628 struct fuse_req *req = fuse_get_req_nopages(fc);
633 mode &= ~current_umask();
635 memset(&inarg, 0, sizeof(inarg));
637 inarg.rdev = new_encode_dev(rdev);
638 inarg.umask = current_umask();
639 req->in.h.opcode = FUSE_MKNOD;
641 req->in.args[0].size = fc->minor < 12 ? FUSE_COMPAT_MKNOD_IN_SIZE :
643 req->in.args[0].value = &inarg;
644 req->in.args[1].size = entry->d_name.len + 1;
645 req->in.args[1].value = entry->d_name.name;
646 return create_new_entry(fc, req, dir, entry, mode);
649 static int fuse_create(struct inode *dir, struct dentry *entry, umode_t mode,
652 return fuse_mknod(dir, entry, mode, 0);
655 static int fuse_mkdir(struct inode *dir, struct dentry *entry, umode_t mode)
657 struct fuse_mkdir_in inarg;
658 struct fuse_conn *fc = get_fuse_conn(dir);
659 struct fuse_req *req = fuse_get_req_nopages(fc);
664 mode &= ~current_umask();
666 memset(&inarg, 0, sizeof(inarg));
668 inarg.umask = current_umask();
669 req->in.h.opcode = FUSE_MKDIR;
671 req->in.args[0].size = sizeof(inarg);
672 req->in.args[0].value = &inarg;
673 req->in.args[1].size = entry->d_name.len + 1;
674 req->in.args[1].value = entry->d_name.name;
675 return create_new_entry(fc, req, dir, entry, S_IFDIR);
678 static int fuse_symlink(struct inode *dir, struct dentry *entry,
681 struct fuse_conn *fc = get_fuse_conn(dir);
682 unsigned len = strlen(link) + 1;
683 struct fuse_req *req = fuse_get_req_nopages(fc);
687 req->in.h.opcode = FUSE_SYMLINK;
689 req->in.args[0].size = entry->d_name.len + 1;
690 req->in.args[0].value = entry->d_name.name;
691 req->in.args[1].size = len;
692 req->in.args[1].value = link;
693 return create_new_entry(fc, req, dir, entry, S_IFLNK);
696 static int fuse_unlink(struct inode *dir, struct dentry *entry)
699 struct fuse_conn *fc = get_fuse_conn(dir);
700 struct fuse_req *req = fuse_get_req_nopages(fc);
704 req->in.h.opcode = FUSE_UNLINK;
705 req->in.h.nodeid = get_node_id(dir);
707 req->in.args[0].size = entry->d_name.len + 1;
708 req->in.args[0].value = entry->d_name.name;
709 fuse_request_send(fc, req);
710 err = req->out.h.error;
711 fuse_put_request(fc, req);
713 struct inode *inode = entry->d_inode;
714 struct fuse_inode *fi = get_fuse_inode(inode);
716 spin_lock(&fc->lock);
717 fi->attr_version = ++fc->attr_version;
719 * If i_nlink == 0 then unlink doesn't make sense, yet this can
720 * happen if userspace filesystem is careless. It would be
721 * difficult to enforce correct nlink usage so just ignore this
724 if (inode->i_nlink > 0)
726 spin_unlock(&fc->lock);
727 fuse_invalidate_attr(inode);
728 fuse_invalidate_attr(dir);
729 fuse_invalidate_entry_cache(entry);
730 } else if (err == -EINTR)
731 fuse_invalidate_entry(entry);
735 static int fuse_rmdir(struct inode *dir, struct dentry *entry)
738 struct fuse_conn *fc = get_fuse_conn(dir);
739 struct fuse_req *req = fuse_get_req_nopages(fc);
743 req->in.h.opcode = FUSE_RMDIR;
744 req->in.h.nodeid = get_node_id(dir);
746 req->in.args[0].size = entry->d_name.len + 1;
747 req->in.args[0].value = entry->d_name.name;
748 fuse_request_send(fc, req);
749 err = req->out.h.error;
750 fuse_put_request(fc, req);
752 clear_nlink(entry->d_inode);
753 fuse_invalidate_attr(dir);
754 fuse_invalidate_entry_cache(entry);
755 } else if (err == -EINTR)
756 fuse_invalidate_entry(entry);
760 static int fuse_rename(struct inode *olddir, struct dentry *oldent,
761 struct inode *newdir, struct dentry *newent)
764 struct fuse_rename_in inarg;
765 struct fuse_conn *fc = get_fuse_conn(olddir);
766 struct fuse_req *req = fuse_get_req_nopages(fc);
771 memset(&inarg, 0, sizeof(inarg));
772 inarg.newdir = get_node_id(newdir);
773 req->in.h.opcode = FUSE_RENAME;
774 req->in.h.nodeid = get_node_id(olddir);
776 req->in.args[0].size = sizeof(inarg);
777 req->in.args[0].value = &inarg;
778 req->in.args[1].size = oldent->d_name.len + 1;
779 req->in.args[1].value = oldent->d_name.name;
780 req->in.args[2].size = newent->d_name.len + 1;
781 req->in.args[2].value = newent->d_name.name;
782 fuse_request_send(fc, req);
783 err = req->out.h.error;
784 fuse_put_request(fc, req);
787 fuse_invalidate_attr(oldent->d_inode);
789 fuse_invalidate_attr(olddir);
790 if (olddir != newdir)
791 fuse_invalidate_attr(newdir);
793 /* newent will end up negative */
794 if (newent->d_inode) {
795 fuse_invalidate_attr(newent->d_inode);
796 fuse_invalidate_entry_cache(newent);
798 } else if (err == -EINTR) {
799 /* If request was interrupted, DEITY only knows if the
800 rename actually took place. If the invalidation
801 fails (e.g. some process has CWD under the renamed
802 directory), then there can be inconsistency between
803 the dcache and the real filesystem. Tough luck. */
804 fuse_invalidate_entry(oldent);
806 fuse_invalidate_entry(newent);
812 static int fuse_link(struct dentry *entry, struct inode *newdir,
813 struct dentry *newent)
816 struct fuse_link_in inarg;
817 struct inode *inode = entry->d_inode;
818 struct fuse_conn *fc = get_fuse_conn(inode);
819 struct fuse_req *req = fuse_get_req_nopages(fc);
823 memset(&inarg, 0, sizeof(inarg));
824 inarg.oldnodeid = get_node_id(inode);
825 req->in.h.opcode = FUSE_LINK;
827 req->in.args[0].size = sizeof(inarg);
828 req->in.args[0].value = &inarg;
829 req->in.args[1].size = newent->d_name.len + 1;
830 req->in.args[1].value = newent->d_name.name;
831 err = create_new_entry(fc, req, newdir, newent, inode->i_mode);
832 /* Contrary to "normal" filesystems it can happen that link
833 makes two "logical" inodes point to the same "physical"
834 inode. We invalidate the attributes of the old one, so it
835 will reflect changes in the backing inode (link count,
839 struct fuse_inode *fi = get_fuse_inode(inode);
841 spin_lock(&fc->lock);
842 fi->attr_version = ++fc->attr_version;
844 spin_unlock(&fc->lock);
845 fuse_invalidate_attr(inode);
846 } else if (err == -EINTR) {
847 fuse_invalidate_attr(inode);
852 static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr,
855 unsigned int blkbits;
857 stat->dev = inode->i_sb->s_dev;
858 stat->ino = attr->ino;
859 stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777);
860 stat->nlink = attr->nlink;
861 stat->uid = make_kuid(&init_user_ns, attr->uid);
862 stat->gid = make_kgid(&init_user_ns, attr->gid);
863 stat->rdev = inode->i_rdev;
864 stat->atime.tv_sec = attr->atime;
865 stat->atime.tv_nsec = attr->atimensec;
866 stat->mtime.tv_sec = attr->mtime;
867 stat->mtime.tv_nsec = attr->mtimensec;
868 stat->ctime.tv_sec = attr->ctime;
869 stat->ctime.tv_nsec = attr->ctimensec;
870 stat->size = attr->size;
871 stat->blocks = attr->blocks;
873 if (attr->blksize != 0)
874 blkbits = ilog2(attr->blksize);
876 blkbits = inode->i_sb->s_blocksize_bits;
878 stat->blksize = 1 << blkbits;
881 static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
885 struct fuse_getattr_in inarg;
886 struct fuse_attr_out outarg;
887 struct fuse_conn *fc = get_fuse_conn(inode);
888 struct fuse_req *req;
891 req = fuse_get_req_nopages(fc);
895 attr_version = fuse_get_attr_version(fc);
897 memset(&inarg, 0, sizeof(inarg));
898 memset(&outarg, 0, sizeof(outarg));
899 /* Directories have separate file-handle space */
900 if (file && S_ISREG(inode->i_mode)) {
901 struct fuse_file *ff = file->private_data;
903 inarg.getattr_flags |= FUSE_GETATTR_FH;
906 req->in.h.opcode = FUSE_GETATTR;
907 req->in.h.nodeid = get_node_id(inode);
909 req->in.args[0].size = sizeof(inarg);
910 req->in.args[0].value = &inarg;
911 req->out.numargs = 1;
913 req->out.args[0].size = FUSE_COMPAT_ATTR_OUT_SIZE;
915 req->out.args[0].size = sizeof(outarg);
916 req->out.args[0].value = &outarg;
917 fuse_request_send(fc, req);
918 err = req->out.h.error;
919 fuse_put_request(fc, req);
921 if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
922 make_bad_inode(inode);
925 fuse_change_attributes(inode, &outarg.attr,
926 attr_timeout(&outarg),
929 fuse_fillattr(inode, &outarg.attr, stat);
935 int fuse_update_attributes(struct inode *inode, struct kstat *stat,
936 struct file *file, bool *refreshed)
938 struct fuse_inode *fi = get_fuse_inode(inode);
942 if (fi->i_time < get_jiffies_64()) {
944 err = fuse_do_getattr(inode, stat, file);
949 generic_fillattr(inode, stat);
950 stat->mode = fi->orig_i_mode;
951 stat->ino = fi->orig_ino;
955 if (refreshed != NULL)
961 int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
962 u64 child_nodeid, struct qstr *name)
965 struct inode *parent;
967 struct dentry *entry;
969 parent = ilookup5(sb, parent_nodeid, fuse_inode_eq, &parent_nodeid);
973 mutex_lock(&parent->i_mutex);
974 if (!S_ISDIR(parent->i_mode))
978 dir = d_find_alias(parent);
982 entry = d_lookup(dir, name);
987 fuse_invalidate_attr(parent);
988 fuse_invalidate_entry(entry);
990 if (child_nodeid != 0 && entry->d_inode) {
991 mutex_lock(&entry->d_inode->i_mutex);
992 if (get_node_id(entry->d_inode) != child_nodeid) {
996 if (d_mountpoint(entry)) {
1000 if (S_ISDIR(entry->d_inode->i_mode)) {
1001 shrink_dcache_parent(entry);
1002 if (!simple_empty(entry)) {
1006 entry->d_inode->i_flags |= S_DEAD;
1009 clear_nlink(entry->d_inode);
1012 mutex_unlock(&entry->d_inode->i_mutex);
1021 mutex_unlock(&parent->i_mutex);
1027 * Calling into a user-controlled filesystem gives the filesystem
1028 * daemon ptrace-like capabilities over the current process. This
1029 * means, that the filesystem daemon is able to record the exact
1030 * filesystem operations performed, and can also control the behavior
1031 * of the requester process in otherwise impossible ways. For example
1032 * it can delay the operation for arbitrary length of time allowing
1033 * DoS against the requester.
1035 * For this reason only those processes can call into the filesystem,
1036 * for which the owner of the mount has ptrace privilege. This
1037 * excludes processes started by other users, suid or sgid processes.
1039 int fuse_allow_current_process(struct fuse_conn *fc)
1041 const struct cred *cred;
1043 if (fc->flags & FUSE_ALLOW_OTHER)
1046 cred = current_cred();
1047 if (uid_eq(cred->euid, fc->user_id) &&
1048 uid_eq(cred->suid, fc->user_id) &&
1049 uid_eq(cred->uid, fc->user_id) &&
1050 gid_eq(cred->egid, fc->group_id) &&
1051 gid_eq(cred->sgid, fc->group_id) &&
1052 gid_eq(cred->gid, fc->group_id))
1058 static int fuse_access(struct inode *inode, int mask)
1060 struct fuse_conn *fc = get_fuse_conn(inode);
1061 struct fuse_req *req;
1062 struct fuse_access_in inarg;
1068 req = fuse_get_req_nopages(fc);
1070 return PTR_ERR(req);
1072 memset(&inarg, 0, sizeof(inarg));
1073 inarg.mask = mask & (MAY_READ | MAY_WRITE | MAY_EXEC);
1074 req->in.h.opcode = FUSE_ACCESS;
1075 req->in.h.nodeid = get_node_id(inode);
1076 req->in.numargs = 1;
1077 req->in.args[0].size = sizeof(inarg);
1078 req->in.args[0].value = &inarg;
1079 fuse_request_send(fc, req);
1080 err = req->out.h.error;
1081 fuse_put_request(fc, req);
1082 if (err == -ENOSYS) {
1089 static int fuse_perm_getattr(struct inode *inode, int mask)
1091 if (mask & MAY_NOT_BLOCK)
1094 return fuse_do_getattr(inode, NULL, NULL);
1098 * Check permission. The two basic access models of FUSE are:
1100 * 1) Local access checking ('default_permissions' mount option) based
1101 * on file mode. This is the plain old disk filesystem permission
1104 * 2) "Remote" access checking, where server is responsible for
1105 * checking permission in each inode operation. An exception to this
1106 * is if ->permission() was invoked from sys_access() in which case an
1107 * access request is sent. Execute permission is still checked
1108 * locally based on file mode.
1110 static int fuse_permission(struct inode *inode, int mask)
1112 struct fuse_conn *fc = get_fuse_conn(inode);
1113 bool refreshed = false;
1116 if (!fuse_allow_current_process(fc))
1120 * If attributes are needed, refresh them before proceeding
1122 if ((fc->flags & FUSE_DEFAULT_PERMISSIONS) ||
1123 ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) {
1124 struct fuse_inode *fi = get_fuse_inode(inode);
1126 if (fi->i_time < get_jiffies_64()) {
1129 err = fuse_perm_getattr(inode, mask);
1135 if (fc->flags & FUSE_DEFAULT_PERMISSIONS) {
1136 err = generic_permission(inode, mask);
1138 /* If permission is denied, try to refresh file
1139 attributes. This is also needed, because the root
1140 node will at first have no permissions */
1141 if (err == -EACCES && !refreshed) {
1142 err = fuse_perm_getattr(inode, mask);
1144 err = generic_permission(inode, mask);
1147 /* Note: the opposite of the above test does not
1148 exist. So if permissions are revoked this won't be
1149 noticed immediately, only after the attribute
1150 timeout has expired */
1151 } else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
1152 if (mask & MAY_NOT_BLOCK)
1155 err = fuse_access(inode, mask);
1156 } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
1157 if (!(inode->i_mode & S_IXUGO)) {
1161 err = fuse_perm_getattr(inode, mask);
1162 if (!err && !(inode->i_mode & S_IXUGO))
1169 static int parse_dirfile(char *buf, size_t nbytes, struct file *file,
1170 struct dir_context *ctx)
1172 while (nbytes >= FUSE_NAME_OFFSET) {
1173 struct fuse_dirent *dirent = (struct fuse_dirent *) buf;
1174 size_t reclen = FUSE_DIRENT_SIZE(dirent);
1175 if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
1177 if (reclen > nbytes)
1179 if (memchr(dirent->name, '/', dirent->namelen) != NULL)
1182 if (!dir_emit(ctx, dirent->name, dirent->namelen,
1183 dirent->ino, dirent->type))
1188 ctx->pos = dirent->off;
1194 static int fuse_direntplus_link(struct file *file,
1195 struct fuse_direntplus *direntplus,
1199 struct fuse_entry_out *o = &direntplus->entry_out;
1200 struct fuse_dirent *dirent = &direntplus->dirent;
1201 struct dentry *parent = file->f_path.dentry;
1202 struct qstr name = QSTR_INIT(dirent->name, dirent->namelen);
1203 struct dentry *dentry;
1204 struct dentry *alias;
1205 struct inode *dir = parent->d_inode;
1206 struct fuse_conn *fc;
1207 struct inode *inode;
1211 * Unlike in the case of fuse_lookup, zero nodeid does not mean
1212 * ENOENT. Instead, it only means the userspace filesystem did
1213 * not want to return attributes/handle for this entry.
1220 if (name.name[0] == '.') {
1222 * We could potentially refresh the attributes of the directory
1227 if (name.name[1] == '.' && name.len == 2)
1231 if (invalid_nodeid(o->nodeid))
1233 if (!fuse_valid_type(o->attr.mode))
1236 fc = get_fuse_conn(dir);
1238 name.hash = full_name_hash(name.name, name.len);
1239 dentry = d_lookup(parent, &name);
1241 inode = dentry->d_inode;
1244 } else if (get_node_id(inode) != o->nodeid ||
1245 ((o->attr.mode ^ inode->i_mode) & S_IFMT)) {
1246 err = d_invalidate(dentry);
1249 } else if (is_bad_inode(inode)) {
1253 struct fuse_inode *fi;
1254 fi = get_fuse_inode(inode);
1255 spin_lock(&fc->lock);
1257 spin_unlock(&fc->lock);
1259 fuse_change_attributes(inode, &o->attr,
1260 entry_attr_timeout(o),
1264 * The other branch to 'found' comes via fuse_iget()
1265 * which bumps nlookup inside
1272 dentry = d_alloc(parent, &name);
1277 inode = fuse_iget(dir->i_sb, o->nodeid, o->generation,
1278 &o->attr, entry_attr_timeout(o), attr_version);
1282 alias = fuse_materialise_dentry(dentry, inode);
1283 err = PTR_ERR(alias);
1293 fuse_change_entry_timeout(dentry, o);
1301 static int parse_dirplusfile(char *buf, size_t nbytes, struct file *file,
1302 struct dir_context *ctx, u64 attr_version)
1304 struct fuse_direntplus *direntplus;
1305 struct fuse_dirent *dirent;
1310 while (nbytes >= FUSE_NAME_OFFSET_DIRENTPLUS) {
1311 direntplus = (struct fuse_direntplus *) buf;
1312 dirent = &direntplus->dirent;
1313 reclen = FUSE_DIRENTPLUS_SIZE(direntplus);
1315 if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
1317 if (reclen > nbytes)
1319 if (memchr(dirent->name, '/', dirent->namelen) != NULL)
1323 /* We fill entries into dstbuf only as much as
1324 it can hold. But we still continue iterating
1325 over remaining entries to link them. If not,
1326 we need to send a FORGET for each of those
1327 which we did not link.
1329 over = !dir_emit(ctx, dirent->name, dirent->namelen,
1330 dirent->ino, dirent->type);
1331 ctx->pos = dirent->off;
1337 ret = fuse_direntplus_link(file, direntplus, attr_version);
1339 fuse_force_forget(file, direntplus->entry_out.nodeid);
1345 static int fuse_readdir(struct file *file, struct dir_context *ctx)
1350 struct inode *inode = file_inode(file);
1351 struct fuse_conn *fc = get_fuse_conn(inode);
1352 struct fuse_req *req;
1353 u64 attr_version = 0;
1355 if (is_bad_inode(inode))
1358 req = fuse_get_req(fc, 1);
1360 return PTR_ERR(req);
1362 page = alloc_page(GFP_KERNEL);
1364 fuse_put_request(fc, req);
1368 plus = fuse_use_readdirplus(inode, ctx);
1369 req->out.argpages = 1;
1371 req->pages[0] = page;
1372 req->page_descs[0].length = PAGE_SIZE;
1374 attr_version = fuse_get_attr_version(fc);
1375 fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
1378 fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
1381 fuse_request_send(fc, req);
1382 nbytes = req->out.args[0].size;
1383 err = req->out.h.error;
1384 fuse_put_request(fc, req);
1387 err = parse_dirplusfile(page_address(page), nbytes,
1391 err = parse_dirfile(page_address(page), nbytes, file,
1397 fuse_invalidate_attr(inode); /* atime changed */
1401 static char *read_link(struct dentry *dentry)
1403 struct inode *inode = dentry->d_inode;
1404 struct fuse_conn *fc = get_fuse_conn(inode);
1405 struct fuse_req *req = fuse_get_req_nopages(fc);
1409 return ERR_CAST(req);
1411 link = (char *) __get_free_page(GFP_KERNEL);
1413 link = ERR_PTR(-ENOMEM);
1416 req->in.h.opcode = FUSE_READLINK;
1417 req->in.h.nodeid = get_node_id(inode);
1418 req->out.argvar = 1;
1419 req->out.numargs = 1;
1420 req->out.args[0].size = PAGE_SIZE - 1;
1421 req->out.args[0].value = link;
1422 fuse_request_send(fc, req);
1423 if (req->out.h.error) {
1424 free_page((unsigned long) link);
1425 link = ERR_PTR(req->out.h.error);
1427 link[req->out.args[0].size] = '\0';
1429 fuse_put_request(fc, req);
1430 fuse_invalidate_attr(inode); /* atime changed */
1434 static void free_link(char *link)
1437 free_page((unsigned long) link);
1440 static void *fuse_follow_link(struct dentry *dentry, struct nameidata *nd)
1442 nd_set_link(nd, read_link(dentry));
1446 static void fuse_put_link(struct dentry *dentry, struct nameidata *nd, void *c)
1448 free_link(nd_get_link(nd));
1451 static int fuse_dir_open(struct inode *inode, struct file *file)
1453 return fuse_open_common(inode, file, true);
1456 static int fuse_dir_release(struct inode *inode, struct file *file)
1458 fuse_release_common(file, FUSE_RELEASEDIR);
1463 static int fuse_dir_fsync(struct file *file, loff_t start, loff_t end,
1466 return fuse_fsync_common(file, start, end, datasync, 1);
1469 static long fuse_dir_ioctl(struct file *file, unsigned int cmd,
1472 struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1474 /* FUSE_IOCTL_DIR only supported for API version >= 7.18 */
1478 return fuse_ioctl_common(file, cmd, arg, FUSE_IOCTL_DIR);
1481 static long fuse_dir_compat_ioctl(struct file *file, unsigned int cmd,
1484 struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1489 return fuse_ioctl_common(file, cmd, arg,
1490 FUSE_IOCTL_COMPAT | FUSE_IOCTL_DIR);
1493 static bool update_mtime(unsigned ivalid)
1495 /* Always update if mtime is explicitly set */
1496 if (ivalid & ATTR_MTIME_SET)
1499 /* If it's an open(O_TRUNC) or an ftruncate(), don't update */
1500 if ((ivalid & ATTR_SIZE) && (ivalid & (ATTR_OPEN | ATTR_FILE)))
1503 /* In all other cases update */
1507 static void iattr_to_fattr(struct iattr *iattr, struct fuse_setattr_in *arg)
1509 unsigned ivalid = iattr->ia_valid;
1511 if (ivalid & ATTR_MODE)
1512 arg->valid |= FATTR_MODE, arg->mode = iattr->ia_mode;
1513 if (ivalid & ATTR_UID)
1514 arg->valid |= FATTR_UID, arg->uid = from_kuid(&init_user_ns, iattr->ia_uid);
1515 if (ivalid & ATTR_GID)
1516 arg->valid |= FATTR_GID, arg->gid = from_kgid(&init_user_ns, iattr->ia_gid);
1517 if (ivalid & ATTR_SIZE)
1518 arg->valid |= FATTR_SIZE, arg->size = iattr->ia_size;
1519 if (ivalid & ATTR_ATIME) {
1520 arg->valid |= FATTR_ATIME;
1521 arg->atime = iattr->ia_atime.tv_sec;
1522 arg->atimensec = iattr->ia_atime.tv_nsec;
1523 if (!(ivalid & ATTR_ATIME_SET))
1524 arg->valid |= FATTR_ATIME_NOW;
1526 if ((ivalid & ATTR_MTIME) && update_mtime(ivalid)) {
1527 arg->valid |= FATTR_MTIME;
1528 arg->mtime = iattr->ia_mtime.tv_sec;
1529 arg->mtimensec = iattr->ia_mtime.tv_nsec;
1530 if (!(ivalid & ATTR_MTIME_SET))
1531 arg->valid |= FATTR_MTIME_NOW;
1536 * Prevent concurrent writepages on inode
1538 * This is done by adding a negative bias to the inode write counter
1539 * and waiting for all pending writes to finish.
1541 void fuse_set_nowrite(struct inode *inode)
1543 struct fuse_conn *fc = get_fuse_conn(inode);
1544 struct fuse_inode *fi = get_fuse_inode(inode);
1546 BUG_ON(!mutex_is_locked(&inode->i_mutex));
1548 spin_lock(&fc->lock);
1549 BUG_ON(fi->writectr < 0);
1550 fi->writectr += FUSE_NOWRITE;
1551 spin_unlock(&fc->lock);
1552 wait_event(fi->page_waitq, fi->writectr == FUSE_NOWRITE);
1556 * Allow writepages on inode
1558 * Remove the bias from the writecounter and send any queued
1561 static void __fuse_release_nowrite(struct inode *inode)
1563 struct fuse_inode *fi = get_fuse_inode(inode);
1565 BUG_ON(fi->writectr != FUSE_NOWRITE);
1567 fuse_flush_writepages(inode);
1570 void fuse_release_nowrite(struct inode *inode)
1572 struct fuse_conn *fc = get_fuse_conn(inode);
1574 spin_lock(&fc->lock);
1575 __fuse_release_nowrite(inode);
1576 spin_unlock(&fc->lock);
1580 * Set attributes, and at the same time refresh them.
1582 * Truncation is slightly complicated, because the 'truncate' request
1583 * may fail, in which case we don't want to touch the mapping.
1584 * vmtruncate() doesn't allow for this case, so do the rlimit checking
1585 * and the actual truncation by hand.
1587 int fuse_do_setattr(struct inode *inode, struct iattr *attr,
1590 struct fuse_conn *fc = get_fuse_conn(inode);
1591 struct fuse_inode *fi = get_fuse_inode(inode);
1592 struct fuse_req *req;
1593 struct fuse_setattr_in inarg;
1594 struct fuse_attr_out outarg;
1595 bool is_truncate = false;
1599 if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS))
1600 attr->ia_valid |= ATTR_FORCE;
1602 err = inode_change_ok(inode, attr);
1606 if (attr->ia_valid & ATTR_OPEN) {
1607 if (fc->atomic_o_trunc)
1612 if (attr->ia_valid & ATTR_SIZE)
1615 req = fuse_get_req_nopages(fc);
1617 return PTR_ERR(req);
1620 fuse_set_nowrite(inode);
1621 set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1624 memset(&inarg, 0, sizeof(inarg));
1625 memset(&outarg, 0, sizeof(outarg));
1626 iattr_to_fattr(attr, &inarg);
1628 struct fuse_file *ff = file->private_data;
1629 inarg.valid |= FATTR_FH;
1632 if (attr->ia_valid & ATTR_SIZE) {
1633 /* For mandatory locking in truncate */
1634 inarg.valid |= FATTR_LOCKOWNER;
1635 inarg.lock_owner = fuse_lock_owner_id(fc, current->files);
1637 req->in.h.opcode = FUSE_SETATTR;
1638 req->in.h.nodeid = get_node_id(inode);
1639 req->in.numargs = 1;
1640 req->in.args[0].size = sizeof(inarg);
1641 req->in.args[0].value = &inarg;
1642 req->out.numargs = 1;
1644 req->out.args[0].size = FUSE_COMPAT_ATTR_OUT_SIZE;
1646 req->out.args[0].size = sizeof(outarg);
1647 req->out.args[0].value = &outarg;
1648 fuse_request_send(fc, req);
1649 err = req->out.h.error;
1650 fuse_put_request(fc, req);
1653 fuse_invalidate_attr(inode);
1657 if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
1658 make_bad_inode(inode);
1663 spin_lock(&fc->lock);
1664 fuse_change_attributes_common(inode, &outarg.attr,
1665 attr_timeout(&outarg));
1666 oldsize = inode->i_size;
1667 i_size_write(inode, outarg.attr.size);
1670 /* NOTE: this may release/reacquire fc->lock */
1671 __fuse_release_nowrite(inode);
1673 spin_unlock(&fc->lock);
1676 * Only call invalidate_inode_pages2() after removing
1677 * FUSE_NOWRITE, otherwise fuse_launder_page() would deadlock.
1679 if (S_ISREG(inode->i_mode) && oldsize != outarg.attr.size) {
1680 truncate_pagecache(inode, outarg.attr.size);
1681 invalidate_inode_pages2(inode->i_mapping);
1684 clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1689 fuse_release_nowrite(inode);
1691 clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1695 static int fuse_setattr(struct dentry *entry, struct iattr *attr)
1697 struct inode *inode = entry->d_inode;
1699 if (!fuse_allow_current_process(get_fuse_conn(inode)))
1702 if (attr->ia_valid & ATTR_FILE)
1703 return fuse_do_setattr(inode, attr, attr->ia_file);
1705 return fuse_do_setattr(inode, attr, NULL);
1708 static int fuse_getattr(struct vfsmount *mnt, struct dentry *entry,
1711 struct inode *inode = entry->d_inode;
1712 struct fuse_conn *fc = get_fuse_conn(inode);
1714 if (!fuse_allow_current_process(fc))
1717 return fuse_update_attributes(inode, stat, NULL, NULL);
1720 static int fuse_setxattr(struct dentry *entry, const char *name,
1721 const void *value, size_t size, int flags)
1723 struct inode *inode = entry->d_inode;
1724 struct fuse_conn *fc = get_fuse_conn(inode);
1725 struct fuse_req *req;
1726 struct fuse_setxattr_in inarg;
1729 if (fc->no_setxattr)
1732 req = fuse_get_req_nopages(fc);
1734 return PTR_ERR(req);
1736 memset(&inarg, 0, sizeof(inarg));
1738 inarg.flags = flags;
1739 req->in.h.opcode = FUSE_SETXATTR;
1740 req->in.h.nodeid = get_node_id(inode);
1741 req->in.numargs = 3;
1742 req->in.args[0].size = sizeof(inarg);
1743 req->in.args[0].value = &inarg;
1744 req->in.args[1].size = strlen(name) + 1;
1745 req->in.args[1].value = name;
1746 req->in.args[2].size = size;
1747 req->in.args[2].value = value;
1748 fuse_request_send(fc, req);
1749 err = req->out.h.error;
1750 fuse_put_request(fc, req);
1751 if (err == -ENOSYS) {
1752 fc->no_setxattr = 1;
1756 fuse_invalidate_attr(inode);
1760 static ssize_t fuse_getxattr(struct dentry *entry, const char *name,
1761 void *value, size_t size)
1763 struct inode *inode = entry->d_inode;
1764 struct fuse_conn *fc = get_fuse_conn(inode);
1765 struct fuse_req *req;
1766 struct fuse_getxattr_in inarg;
1767 struct fuse_getxattr_out outarg;
1770 if (fc->no_getxattr)
1773 req = fuse_get_req_nopages(fc);
1775 return PTR_ERR(req);
1777 memset(&inarg, 0, sizeof(inarg));
1779 req->in.h.opcode = FUSE_GETXATTR;
1780 req->in.h.nodeid = get_node_id(inode);
1781 req->in.numargs = 2;
1782 req->in.args[0].size = sizeof(inarg);
1783 req->in.args[0].value = &inarg;
1784 req->in.args[1].size = strlen(name) + 1;
1785 req->in.args[1].value = name;
1786 /* This is really two different operations rolled into one */
1787 req->out.numargs = 1;
1789 req->out.argvar = 1;
1790 req->out.args[0].size = size;
1791 req->out.args[0].value = value;
1793 req->out.args[0].size = sizeof(outarg);
1794 req->out.args[0].value = &outarg;
1796 fuse_request_send(fc, req);
1797 ret = req->out.h.error;
1799 ret = size ? req->out.args[0].size : outarg.size;
1801 if (ret == -ENOSYS) {
1802 fc->no_getxattr = 1;
1806 fuse_put_request(fc, req);
1810 static ssize_t fuse_listxattr(struct dentry *entry, char *list, size_t size)
1812 struct inode *inode = entry->d_inode;
1813 struct fuse_conn *fc = get_fuse_conn(inode);
1814 struct fuse_req *req;
1815 struct fuse_getxattr_in inarg;
1816 struct fuse_getxattr_out outarg;
1819 if (!fuse_allow_current_process(fc))
1822 if (fc->no_listxattr)
1825 req = fuse_get_req_nopages(fc);
1827 return PTR_ERR(req);
1829 memset(&inarg, 0, sizeof(inarg));
1831 req->in.h.opcode = FUSE_LISTXATTR;
1832 req->in.h.nodeid = get_node_id(inode);
1833 req->in.numargs = 1;
1834 req->in.args[0].size = sizeof(inarg);
1835 req->in.args[0].value = &inarg;
1836 /* This is really two different operations rolled into one */
1837 req->out.numargs = 1;
1839 req->out.argvar = 1;
1840 req->out.args[0].size = size;
1841 req->out.args[0].value = list;
1843 req->out.args[0].size = sizeof(outarg);
1844 req->out.args[0].value = &outarg;
1846 fuse_request_send(fc, req);
1847 ret = req->out.h.error;
1849 ret = size ? req->out.args[0].size : outarg.size;
1851 if (ret == -ENOSYS) {
1852 fc->no_listxattr = 1;
1856 fuse_put_request(fc, req);
1860 static int fuse_removexattr(struct dentry *entry, const char *name)
1862 struct inode *inode = entry->d_inode;
1863 struct fuse_conn *fc = get_fuse_conn(inode);
1864 struct fuse_req *req;
1867 if (fc->no_removexattr)
1870 req = fuse_get_req_nopages(fc);
1872 return PTR_ERR(req);
1874 req->in.h.opcode = FUSE_REMOVEXATTR;
1875 req->in.h.nodeid = get_node_id(inode);
1876 req->in.numargs = 1;
1877 req->in.args[0].size = strlen(name) + 1;
1878 req->in.args[0].value = name;
1879 fuse_request_send(fc, req);
1880 err = req->out.h.error;
1881 fuse_put_request(fc, req);
1882 if (err == -ENOSYS) {
1883 fc->no_removexattr = 1;
1887 fuse_invalidate_attr(inode);
1891 static const struct inode_operations fuse_dir_inode_operations = {
1892 .lookup = fuse_lookup,
1893 .mkdir = fuse_mkdir,
1894 .symlink = fuse_symlink,
1895 .unlink = fuse_unlink,
1896 .rmdir = fuse_rmdir,
1897 .rename = fuse_rename,
1899 .setattr = fuse_setattr,
1900 .create = fuse_create,
1901 .atomic_open = fuse_atomic_open,
1902 .mknod = fuse_mknod,
1903 .permission = fuse_permission,
1904 .getattr = fuse_getattr,
1905 .setxattr = fuse_setxattr,
1906 .getxattr = fuse_getxattr,
1907 .listxattr = fuse_listxattr,
1908 .removexattr = fuse_removexattr,
1911 static const struct file_operations fuse_dir_operations = {
1912 .llseek = generic_file_llseek,
1913 .read = generic_read_dir,
1914 .iterate = fuse_readdir,
1915 .open = fuse_dir_open,
1916 .release = fuse_dir_release,
1917 .fsync = fuse_dir_fsync,
1918 .unlocked_ioctl = fuse_dir_ioctl,
1919 .compat_ioctl = fuse_dir_compat_ioctl,
1922 static const struct inode_operations fuse_common_inode_operations = {
1923 .setattr = fuse_setattr,
1924 .permission = fuse_permission,
1925 .getattr = fuse_getattr,
1926 .setxattr = fuse_setxattr,
1927 .getxattr = fuse_getxattr,
1928 .listxattr = fuse_listxattr,
1929 .removexattr = fuse_removexattr,
1932 static const struct inode_operations fuse_symlink_inode_operations = {
1933 .setattr = fuse_setattr,
1934 .follow_link = fuse_follow_link,
1935 .put_link = fuse_put_link,
1936 .readlink = generic_readlink,
1937 .getattr = fuse_getattr,
1938 .setxattr = fuse_setxattr,
1939 .getxattr = fuse_getxattr,
1940 .listxattr = fuse_listxattr,
1941 .removexattr = fuse_removexattr,
1944 void fuse_init_common(struct inode *inode)
1946 inode->i_op = &fuse_common_inode_operations;
1949 void fuse_init_dir(struct inode *inode)
1951 inode->i_op = &fuse_dir_inode_operations;
1952 inode->i_fop = &fuse_dir_operations;
1955 void fuse_init_symlink(struct inode *inode)
1957 inode->i_op = &fuse_symlink_inode_operations;