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