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