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