1 /*
2  *	fs/libfs.c
3  *	Library for filesystems writers.
4  */
5 
6 #include <linux/module.h>
7 #include <linux/pagemap.h>
8 #include <linux/slab.h>
9 #include <linux/mount.h>
10 #include <linux/vfs.h>
11 #include <linux/quotaops.h>
12 #include <linux/mutex.h>
13 #include <linux/exportfs.h>
14 #include <linux/writeback.h>
15 #include <linux/buffer_head.h>
16 
17 #include <asm/uaccess.h>
18 
simple_positive(struct dentry * dentry)19 static inline int simple_positive(struct dentry *dentry)
20 {
21 	return dentry->d_inode && !d_unhashed(dentry);
22 }
23 
simple_getattr(struct vfsmount * mnt,struct dentry * dentry,struct kstat * stat)24 int simple_getattr(struct vfsmount *mnt, struct dentry *dentry,
25 		   struct kstat *stat)
26 {
27 	struct inode *inode = dentry->d_inode;
28 	generic_fillattr(inode, stat);
29 	stat->blocks = inode->i_mapping->nrpages << (PAGE_CACHE_SHIFT - 9);
30 	return 0;
31 }
32 
simple_statfs(struct dentry * dentry,struct kstatfs * buf)33 int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
34 {
35 	buf->f_type = dentry->d_sb->s_magic;
36 	buf->f_bsize = PAGE_CACHE_SIZE;
37 	buf->f_namelen = NAME_MAX;
38 	return 0;
39 }
40 
41 /*
42  * Retaining negative dentries for an in-memory filesystem just wastes
43  * memory and lookup time: arrange for them to be deleted immediately.
44  */
simple_delete_dentry(const struct dentry * dentry)45 static int simple_delete_dentry(const struct dentry *dentry)
46 {
47 	return 1;
48 }
49 
50 /*
51  * Lookup the data. This is trivial - if the dentry didn't already
52  * exist, we know it is negative.  Set d_op to delete negative dentries.
53  */
simple_lookup(struct inode * dir,struct dentry * dentry,struct nameidata * nd)54 struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
55 {
56 	static const struct dentry_operations simple_dentry_operations = {
57 		.d_delete = simple_delete_dentry,
58 	};
59 
60 	if (dentry->d_name.len > NAME_MAX)
61 		return ERR_PTR(-ENAMETOOLONG);
62 	d_set_d_op(dentry, &simple_dentry_operations);
63 	d_add(dentry, NULL);
64 	return NULL;
65 }
66 
dcache_dir_open(struct inode * inode,struct file * file)67 int dcache_dir_open(struct inode *inode, struct file *file)
68 {
69 	static struct qstr cursor_name = {.len = 1, .name = "."};
70 
71 	file->private_data = d_alloc(file->f_path.dentry, &cursor_name);
72 
73 	return file->private_data ? 0 : -ENOMEM;
74 }
75 
dcache_dir_close(struct inode * inode,struct file * file)76 int dcache_dir_close(struct inode *inode, struct file *file)
77 {
78 	dput(file->private_data);
79 	return 0;
80 }
81 
dcache_dir_lseek(struct file * file,loff_t offset,int origin)82 loff_t dcache_dir_lseek(struct file *file, loff_t offset, int origin)
83 {
84 	struct dentry *dentry = file->f_path.dentry;
85 	mutex_lock(&dentry->d_inode->i_mutex);
86 	switch (origin) {
87 		case 1:
88 			offset += file->f_pos;
89 		case 0:
90 			if (offset >= 0)
91 				break;
92 		default:
93 			mutex_unlock(&dentry->d_inode->i_mutex);
94 			return -EINVAL;
95 	}
96 	if (offset != file->f_pos) {
97 		file->f_pos = offset;
98 		if (file->f_pos >= 2) {
99 			struct list_head *p;
100 			struct dentry *cursor = file->private_data;
101 			loff_t n = file->f_pos - 2;
102 
103 			spin_lock(&dentry->d_lock);
104 			/* d_lock not required for cursor */
105 			list_del(&cursor->d_u.d_child);
106 			p = dentry->d_subdirs.next;
107 			while (n && p != &dentry->d_subdirs) {
108 				struct dentry *next;
109 				next = list_entry(p, struct dentry, d_u.d_child);
110 				spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
111 				if (simple_positive(next))
112 					n--;
113 				spin_unlock(&next->d_lock);
114 				p = p->next;
115 			}
116 			list_add_tail(&cursor->d_u.d_child, p);
117 			spin_unlock(&dentry->d_lock);
118 		}
119 	}
120 	mutex_unlock(&dentry->d_inode->i_mutex);
121 	return offset;
122 }
123 
124 /* Relationship between i_mode and the DT_xxx types */
dt_type(struct inode * inode)125 static inline unsigned char dt_type(struct inode *inode)
126 {
127 	return (inode->i_mode >> 12) & 15;
128 }
129 
130 /*
131  * Directory is locked and all positive dentries in it are safe, since
132  * for ramfs-type trees they can't go away without unlink() or rmdir(),
133  * both impossible due to the lock on directory.
134  */
135 
dcache_readdir(struct file * filp,void * dirent,filldir_t filldir)136 int dcache_readdir(struct file * filp, void * dirent, filldir_t filldir)
137 {
138 	struct dentry *dentry = filp->f_path.dentry;
139 	struct dentry *cursor = filp->private_data;
140 	struct list_head *p, *q = &cursor->d_u.d_child;
141 	ino_t ino;
142 	int i = filp->f_pos;
143 
144 	switch (i) {
145 		case 0:
146 			ino = dentry->d_inode->i_ino;
147 			if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0)
148 				break;
149 			filp->f_pos++;
150 			i++;
151 			/* fallthrough */
152 		case 1:
153 			ino = parent_ino(dentry);
154 			if (filldir(dirent, "..", 2, i, ino, DT_DIR) < 0)
155 				break;
156 			filp->f_pos++;
157 			i++;
158 			/* fallthrough */
159 		default:
160 			spin_lock(&dentry->d_lock);
161 			if (filp->f_pos == 2)
162 				list_move(q, &dentry->d_subdirs);
163 
164 			for (p=q->next; p != &dentry->d_subdirs; p=p->next) {
165 				struct dentry *next;
166 				next = list_entry(p, struct dentry, d_u.d_child);
167 				spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
168 				if (!simple_positive(next)) {
169 					spin_unlock(&next->d_lock);
170 					continue;
171 				}
172 
173 				spin_unlock(&next->d_lock);
174 				spin_unlock(&dentry->d_lock);
175 				if (filldir(dirent, next->d_name.name,
176 					    next->d_name.len, filp->f_pos,
177 					    next->d_inode->i_ino,
178 					    dt_type(next->d_inode)) < 0)
179 					return 0;
180 				spin_lock(&dentry->d_lock);
181 				spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
182 				/* next is still alive */
183 				list_move(q, p);
184 				spin_unlock(&next->d_lock);
185 				p = q;
186 				filp->f_pos++;
187 			}
188 			spin_unlock(&dentry->d_lock);
189 	}
190 	return 0;
191 }
192 
generic_read_dir(struct file * filp,char __user * buf,size_t siz,loff_t * ppos)193 ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
194 {
195 	return -EISDIR;
196 }
197 
198 const struct file_operations simple_dir_operations = {
199 	.open		= dcache_dir_open,
200 	.release	= dcache_dir_close,
201 	.llseek		= dcache_dir_lseek,
202 	.read		= generic_read_dir,
203 	.readdir	= dcache_readdir,
204 	.fsync		= noop_fsync,
205 };
206 
207 const struct inode_operations simple_dir_inode_operations = {
208 	.lookup		= simple_lookup,
209 };
210 
211 static const struct super_operations simple_super_operations = {
212 	.statfs		= simple_statfs,
213 };
214 
215 /*
216  * Common helper for pseudo-filesystems (sockfs, pipefs, bdev - stuff that
217  * will never be mountable)
218  */
mount_pseudo(struct file_system_type * fs_type,char * name,const struct super_operations * ops,const struct dentry_operations * dops,unsigned long magic)219 struct dentry *mount_pseudo(struct file_system_type *fs_type, char *name,
220 	const struct super_operations *ops,
221 	const struct dentry_operations *dops, unsigned long magic)
222 {
223 	struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL);
224 	struct dentry *dentry;
225 	struct inode *root;
226 	struct qstr d_name = {.name = name, .len = strlen(name)};
227 
228 	if (IS_ERR(s))
229 		return ERR_CAST(s);
230 
231 	s->s_flags = MS_NOUSER;
232 	s->s_maxbytes = MAX_LFS_FILESIZE;
233 	s->s_blocksize = PAGE_SIZE;
234 	s->s_blocksize_bits = PAGE_SHIFT;
235 	s->s_magic = magic;
236 	s->s_op = ops ? ops : &simple_super_operations;
237 	s->s_time_gran = 1;
238 	root = new_inode(s);
239 	if (!root)
240 		goto Enomem;
241 	/*
242 	 * since this is the first inode, make it number 1. New inodes created
243 	 * after this must take care not to collide with it (by passing
244 	 * max_reserved of 1 to iunique).
245 	 */
246 	root->i_ino = 1;
247 	root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR;
248 	root->i_atime = root->i_mtime = root->i_ctime = CURRENT_TIME;
249 	dentry = d_alloc(NULL, &d_name);
250 	if (!dentry) {
251 		iput(root);
252 		goto Enomem;
253 	}
254 	dentry->d_sb = s;
255 	dentry->d_parent = dentry;
256 	d_instantiate(dentry, root);
257 	s->s_root = dentry;
258 	s->s_d_op = dops;
259 	s->s_flags |= MS_ACTIVE;
260 	return dget(s->s_root);
261 
262 Enomem:
263 	deactivate_locked_super(s);
264 	return ERR_PTR(-ENOMEM);
265 }
266 
simple_link(struct dentry * old_dentry,struct inode * dir,struct dentry * dentry)267 int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
268 {
269 	struct inode *inode = old_dentry->d_inode;
270 
271 	inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
272 	inc_nlink(inode);
273 	ihold(inode);
274 	dget(dentry);
275 	d_instantiate(dentry, inode);
276 	return 0;
277 }
278 
simple_empty(struct dentry * dentry)279 int simple_empty(struct dentry *dentry)
280 {
281 	struct dentry *child;
282 	int ret = 0;
283 
284 	spin_lock(&dentry->d_lock);
285 	list_for_each_entry(child, &dentry->d_subdirs, d_u.d_child) {
286 		spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
287 		if (simple_positive(child)) {
288 			spin_unlock(&child->d_lock);
289 			goto out;
290 		}
291 		spin_unlock(&child->d_lock);
292 	}
293 	ret = 1;
294 out:
295 	spin_unlock(&dentry->d_lock);
296 	return ret;
297 }
298 
simple_unlink(struct inode * dir,struct dentry * dentry)299 int simple_unlink(struct inode *dir, struct dentry *dentry)
300 {
301 	struct inode *inode = dentry->d_inode;
302 
303 	inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
304 	drop_nlink(inode);
305 	dput(dentry);
306 	return 0;
307 }
308 
simple_rmdir(struct inode * dir,struct dentry * dentry)309 int simple_rmdir(struct inode *dir, struct dentry *dentry)
310 {
311 	if (!simple_empty(dentry))
312 		return -ENOTEMPTY;
313 
314 	drop_nlink(dentry->d_inode);
315 	simple_unlink(dir, dentry);
316 	drop_nlink(dir);
317 	return 0;
318 }
319 
simple_rename(struct inode * old_dir,struct dentry * old_dentry,struct inode * new_dir,struct dentry * new_dentry)320 int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
321 		struct inode *new_dir, struct dentry *new_dentry)
322 {
323 	struct inode *inode = old_dentry->d_inode;
324 	int they_are_dirs = S_ISDIR(old_dentry->d_inode->i_mode);
325 
326 	if (!simple_empty(new_dentry))
327 		return -ENOTEMPTY;
328 
329 	if (new_dentry->d_inode) {
330 		simple_unlink(new_dir, new_dentry);
331 		if (they_are_dirs)
332 			drop_nlink(old_dir);
333 	} else if (they_are_dirs) {
334 		drop_nlink(old_dir);
335 		inc_nlink(new_dir);
336 	}
337 
338 	old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime =
339 		new_dir->i_mtime = inode->i_ctime = CURRENT_TIME;
340 
341 	return 0;
342 }
343 
344 /**
345  * simple_setattr - setattr for simple filesystem
346  * @dentry: dentry
347  * @iattr: iattr structure
348  *
349  * Returns 0 on success, -error on failure.
350  *
351  * simple_setattr is a simple ->setattr implementation without a proper
352  * implementation of size changes.
353  *
354  * It can either be used for in-memory filesystems or special files
355  * on simple regular filesystems.  Anything that needs to change on-disk
356  * or wire state on size changes needs its own setattr method.
357  */
simple_setattr(struct dentry * dentry,struct iattr * iattr)358 int simple_setattr(struct dentry *dentry, struct iattr *iattr)
359 {
360 	struct inode *inode = dentry->d_inode;
361 	int error;
362 
363 	WARN_ON_ONCE(inode->i_op->truncate);
364 
365 	error = inode_change_ok(inode, iattr);
366 	if (error)
367 		return error;
368 
369 	if (iattr->ia_valid & ATTR_SIZE)
370 		truncate_setsize(inode, iattr->ia_size);
371 	setattr_copy(inode, iattr);
372 	mark_inode_dirty(inode);
373 	return 0;
374 }
375 EXPORT_SYMBOL(simple_setattr);
376 
simple_readpage(struct file * file,struct page * page)377 int simple_readpage(struct file *file, struct page *page)
378 {
379 	clear_highpage(page);
380 	flush_dcache_page(page);
381 	SetPageUptodate(page);
382 	unlock_page(page);
383 	return 0;
384 }
385 
simple_write_begin(struct file * file,struct address_space * mapping,loff_t pos,unsigned len,unsigned flags,struct page ** pagep,void ** fsdata)386 int simple_write_begin(struct file *file, struct address_space *mapping,
387 			loff_t pos, unsigned len, unsigned flags,
388 			struct page **pagep, void **fsdata)
389 {
390 	struct page *page;
391 	pgoff_t index;
392 
393 	index = pos >> PAGE_CACHE_SHIFT;
394 
395 	page = grab_cache_page_write_begin(mapping, index, flags);
396 	if (!page)
397 		return -ENOMEM;
398 
399 	*pagep = page;
400 
401 	if (!PageUptodate(page) && (len != PAGE_CACHE_SIZE)) {
402 		unsigned from = pos & (PAGE_CACHE_SIZE - 1);
403 
404 		zero_user_segments(page, 0, from, from + len, PAGE_CACHE_SIZE);
405 	}
406 	return 0;
407 }
408 
409 /**
410  * simple_write_end - .write_end helper for non-block-device FSes
411  * @available: See .write_end of address_space_operations
412  * @file: 		"
413  * @mapping: 		"
414  * @pos: 		"
415  * @len: 		"
416  * @copied: 		"
417  * @page: 		"
418  * @fsdata: 		"
419  *
420  * simple_write_end does the minimum needed for updating a page after writing is
421  * done. It has the same API signature as the .write_end of
422  * address_space_operations vector. So it can just be set onto .write_end for
423  * FSes that don't need any other processing. i_mutex is assumed to be held.
424  * Block based filesystems should use generic_write_end().
425  * NOTE: Even though i_size might get updated by this function, mark_inode_dirty
426  * is not called, so a filesystem that actually does store data in .write_inode
427  * should extend on what's done here with a call to mark_inode_dirty() in the
428  * case that i_size has changed.
429  */
simple_write_end(struct file * file,struct address_space * mapping,loff_t pos,unsigned len,unsigned copied,struct page * page,void * fsdata)430 int simple_write_end(struct file *file, struct address_space *mapping,
431 			loff_t pos, unsigned len, unsigned copied,
432 			struct page *page, void *fsdata)
433 {
434 	struct inode *inode = page->mapping->host;
435 	loff_t last_pos = pos + copied;
436 
437 	/* zero the stale part of the page if we did a short copy */
438 	if (copied < len) {
439 		unsigned from = pos & (PAGE_CACHE_SIZE - 1);
440 
441 		zero_user(page, from + copied, len - copied);
442 	}
443 
444 	if (!PageUptodate(page))
445 		SetPageUptodate(page);
446 	/*
447 	 * No need to use i_size_read() here, the i_size
448 	 * cannot change under us because we hold the i_mutex.
449 	 */
450 	if (last_pos > inode->i_size)
451 		i_size_write(inode, last_pos);
452 
453 	set_page_dirty(page);
454 	unlock_page(page);
455 	page_cache_release(page);
456 
457 	return copied;
458 }
459 
460 /*
461  * the inodes created here are not hashed. If you use iunique to generate
462  * unique inode values later for this filesystem, then you must take care
463  * to pass it an appropriate max_reserved value to avoid collisions.
464  */
simple_fill_super(struct super_block * s,unsigned long magic,struct tree_descr * files)465 int simple_fill_super(struct super_block *s, unsigned long magic,
466 		      struct tree_descr *files)
467 {
468 	struct inode *inode;
469 	struct dentry *root;
470 	struct dentry *dentry;
471 	int i;
472 
473 	s->s_blocksize = PAGE_CACHE_SIZE;
474 	s->s_blocksize_bits = PAGE_CACHE_SHIFT;
475 	s->s_magic = magic;
476 	s->s_op = &simple_super_operations;
477 	s->s_time_gran = 1;
478 
479 	inode = new_inode(s);
480 	if (!inode)
481 		return -ENOMEM;
482 	/*
483 	 * because the root inode is 1, the files array must not contain an
484 	 * entry at index 1
485 	 */
486 	inode->i_ino = 1;
487 	inode->i_mode = S_IFDIR | 0755;
488 	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
489 	inode->i_op = &simple_dir_inode_operations;
490 	inode->i_fop = &simple_dir_operations;
491 	inode->i_nlink = 2;
492 	root = d_alloc_root(inode);
493 	if (!root) {
494 		iput(inode);
495 		return -ENOMEM;
496 	}
497 	for (i = 0; !files->name || files->name[0]; i++, files++) {
498 		if (!files->name)
499 			continue;
500 
501 		/* warn if it tries to conflict with the root inode */
502 		if (unlikely(i == 1))
503 			printk(KERN_WARNING "%s: %s passed in a files array"
504 				"with an index of 1!\n", __func__,
505 				s->s_type->name);
506 
507 		dentry = d_alloc_name(root, files->name);
508 		if (!dentry)
509 			goto out;
510 		inode = new_inode(s);
511 		if (!inode)
512 			goto out;
513 		inode->i_mode = S_IFREG | files->mode;
514 		inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
515 		inode->i_fop = files->ops;
516 		inode->i_ino = i;
517 		d_add(dentry, inode);
518 	}
519 	s->s_root = root;
520 	return 0;
521 out:
522 	d_genocide(root);
523 	dput(root);
524 	return -ENOMEM;
525 }
526 
527 static DEFINE_SPINLOCK(pin_fs_lock);
528 
simple_pin_fs(struct file_system_type * type,struct vfsmount ** mount,int * count)529 int simple_pin_fs(struct file_system_type *type, struct vfsmount **mount, int *count)
530 {
531 	struct vfsmount *mnt = NULL;
532 	spin_lock(&pin_fs_lock);
533 	if (unlikely(!*mount)) {
534 		spin_unlock(&pin_fs_lock);
535 		mnt = vfs_kern_mount(type, 0, type->name, NULL);
536 		if (IS_ERR(mnt))
537 			return PTR_ERR(mnt);
538 		spin_lock(&pin_fs_lock);
539 		if (!*mount)
540 			*mount = mnt;
541 	}
542 	mntget(*mount);
543 	++*count;
544 	spin_unlock(&pin_fs_lock);
545 	mntput(mnt);
546 	return 0;
547 }
548 
simple_release_fs(struct vfsmount ** mount,int * count)549 void simple_release_fs(struct vfsmount **mount, int *count)
550 {
551 	struct vfsmount *mnt;
552 	spin_lock(&pin_fs_lock);
553 	mnt = *mount;
554 	if (!--*count)
555 		*mount = NULL;
556 	spin_unlock(&pin_fs_lock);
557 	mntput(mnt);
558 }
559 
560 /**
561  * simple_read_from_buffer - copy data from the buffer to user space
562  * @to: the user space buffer to read to
563  * @count: the maximum number of bytes to read
564  * @ppos: the current position in the buffer
565  * @from: the buffer to read from
566  * @available: the size of the buffer
567  *
568  * The simple_read_from_buffer() function reads up to @count bytes from the
569  * buffer @from at offset @ppos into the user space address starting at @to.
570  *
571  * On success, the number of bytes read is returned and the offset @ppos is
572  * advanced by this number, or negative value is returned on error.
573  **/
simple_read_from_buffer(void __user * to,size_t count,loff_t * ppos,const void * from,size_t available)574 ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
575 				const void *from, size_t available)
576 {
577 	loff_t pos = *ppos;
578 	size_t ret;
579 
580 	if (pos < 0)
581 		return -EINVAL;
582 	if (pos >= available || !count)
583 		return 0;
584 	if (count > available - pos)
585 		count = available - pos;
586 	ret = copy_to_user(to, from + pos, count);
587 	if (ret == count)
588 		return -EFAULT;
589 	count -= ret;
590 	*ppos = pos + count;
591 	return count;
592 }
593 
594 /**
595  * simple_write_to_buffer - copy data from user space to the buffer
596  * @to: the buffer to write to
597  * @available: the size of the buffer
598  * @ppos: the current position in the buffer
599  * @from: the user space buffer to read from
600  * @count: the maximum number of bytes to read
601  *
602  * The simple_write_to_buffer() function reads up to @count bytes from the user
603  * space address starting at @from into the buffer @to at offset @ppos.
604  *
605  * On success, the number of bytes written is returned and the offset @ppos is
606  * advanced by this number, or negative value is returned on error.
607  **/
simple_write_to_buffer(void * to,size_t available,loff_t * ppos,const void __user * from,size_t count)608 ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
609 		const void __user *from, size_t count)
610 {
611 	loff_t pos = *ppos;
612 	size_t res;
613 
614 	if (pos < 0)
615 		return -EINVAL;
616 	if (pos >= available || !count)
617 		return 0;
618 	if (count > available - pos)
619 		count = available - pos;
620 	res = copy_from_user(to + pos, from, count);
621 	if (res == count)
622 		return -EFAULT;
623 	count -= res;
624 	*ppos = pos + count;
625 	return count;
626 }
627 
628 /**
629  * memory_read_from_buffer - copy data from the buffer
630  * @to: the kernel space buffer to read to
631  * @count: the maximum number of bytes to read
632  * @ppos: the current position in the buffer
633  * @from: the buffer to read from
634  * @available: the size of the buffer
635  *
636  * The memory_read_from_buffer() function reads up to @count bytes from the
637  * buffer @from at offset @ppos into the kernel space address starting at @to.
638  *
639  * On success, the number of bytes read is returned and the offset @ppos is
640  * advanced by this number, or negative value is returned on error.
641  **/
memory_read_from_buffer(void * to,size_t count,loff_t * ppos,const void * from,size_t available)642 ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
643 				const void *from, size_t available)
644 {
645 	loff_t pos = *ppos;
646 
647 	if (pos < 0)
648 		return -EINVAL;
649 	if (pos >= available)
650 		return 0;
651 	if (count > available - pos)
652 		count = available - pos;
653 	memcpy(to, from + pos, count);
654 	*ppos = pos + count;
655 
656 	return count;
657 }
658 
659 /*
660  * Transaction based IO.
661  * The file expects a single write which triggers the transaction, and then
662  * possibly a read which collects the result - which is stored in a
663  * file-local buffer.
664  */
665 
simple_transaction_set(struct file * file,size_t n)666 void simple_transaction_set(struct file *file, size_t n)
667 {
668 	struct simple_transaction_argresp *ar = file->private_data;
669 
670 	BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
671 
672 	/*
673 	 * The barrier ensures that ar->size will really remain zero until
674 	 * ar->data is ready for reading.
675 	 */
676 	smp_mb();
677 	ar->size = n;
678 }
679 
simple_transaction_get(struct file * file,const char __user * buf,size_t size)680 char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
681 {
682 	struct simple_transaction_argresp *ar;
683 	static DEFINE_SPINLOCK(simple_transaction_lock);
684 
685 	if (size > SIMPLE_TRANSACTION_LIMIT - 1)
686 		return ERR_PTR(-EFBIG);
687 
688 	ar = (struct simple_transaction_argresp *)get_zeroed_page(GFP_KERNEL);
689 	if (!ar)
690 		return ERR_PTR(-ENOMEM);
691 
692 	spin_lock(&simple_transaction_lock);
693 
694 	/* only one write allowed per open */
695 	if (file->private_data) {
696 		spin_unlock(&simple_transaction_lock);
697 		free_page((unsigned long)ar);
698 		return ERR_PTR(-EBUSY);
699 	}
700 
701 	file->private_data = ar;
702 
703 	spin_unlock(&simple_transaction_lock);
704 
705 	if (copy_from_user(ar->data, buf, size))
706 		return ERR_PTR(-EFAULT);
707 
708 	return ar->data;
709 }
710 
simple_transaction_read(struct file * file,char __user * buf,size_t size,loff_t * pos)711 ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos)
712 {
713 	struct simple_transaction_argresp *ar = file->private_data;
714 
715 	if (!ar)
716 		return 0;
717 	return simple_read_from_buffer(buf, size, pos, ar->data, ar->size);
718 }
719 
simple_transaction_release(struct inode * inode,struct file * file)720 int simple_transaction_release(struct inode *inode, struct file *file)
721 {
722 	free_page((unsigned long)file->private_data);
723 	return 0;
724 }
725 
726 /* Simple attribute files */
727 
728 struct simple_attr {
729 	int (*get)(void *, u64 *);
730 	int (*set)(void *, u64);
731 	char get_buf[24];	/* enough to store a u64 and "\n\0" */
732 	char set_buf[24];
733 	void *data;
734 	const char *fmt;	/* format for read operation */
735 	struct mutex mutex;	/* protects access to these buffers */
736 };
737 
738 /* simple_attr_open is called by an actual attribute open file operation
739  * to set the attribute specific access operations. */
simple_attr_open(struct inode * inode,struct file * file,int (* get)(void *,u64 *),int (* set)(void *,u64),const char * fmt)740 int simple_attr_open(struct inode *inode, struct file *file,
741 		     int (*get)(void *, u64 *), int (*set)(void *, u64),
742 		     const char *fmt)
743 {
744 	struct simple_attr *attr;
745 
746 	attr = kmalloc(sizeof(*attr), GFP_KERNEL);
747 	if (!attr)
748 		return -ENOMEM;
749 
750 	attr->get = get;
751 	attr->set = set;
752 	attr->data = inode->i_private;
753 	attr->fmt = fmt;
754 	mutex_init(&attr->mutex);
755 
756 	file->private_data = attr;
757 
758 	return nonseekable_open(inode, file);
759 }
760 
simple_attr_release(struct inode * inode,struct file * file)761 int simple_attr_release(struct inode *inode, struct file *file)
762 {
763 	kfree(file->private_data);
764 	return 0;
765 }
766 
767 /* read from the buffer that is filled with the get function */
simple_attr_read(struct file * file,char __user * buf,size_t len,loff_t * ppos)768 ssize_t simple_attr_read(struct file *file, char __user *buf,
769 			 size_t len, loff_t *ppos)
770 {
771 	struct simple_attr *attr;
772 	size_t size;
773 	ssize_t ret;
774 
775 	attr = file->private_data;
776 
777 	if (!attr->get)
778 		return -EACCES;
779 
780 	ret = mutex_lock_interruptible(&attr->mutex);
781 	if (ret)
782 		return ret;
783 
784 	if (*ppos) {		/* continued read */
785 		size = strlen(attr->get_buf);
786 	} else {		/* first read */
787 		u64 val;
788 		ret = attr->get(attr->data, &val);
789 		if (ret)
790 			goto out;
791 
792 		size = scnprintf(attr->get_buf, sizeof(attr->get_buf),
793 				 attr->fmt, (unsigned long long)val);
794 	}
795 
796 	ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size);
797 out:
798 	mutex_unlock(&attr->mutex);
799 	return ret;
800 }
801 
802 /* interpret the buffer as a number to call the set function with */
simple_attr_write(struct file * file,const char __user * buf,size_t len,loff_t * ppos)803 ssize_t simple_attr_write(struct file *file, const char __user *buf,
804 			  size_t len, loff_t *ppos)
805 {
806 	struct simple_attr *attr;
807 	u64 val;
808 	size_t size;
809 	ssize_t ret;
810 
811 	attr = file->private_data;
812 	if (!attr->set)
813 		return -EACCES;
814 
815 	ret = mutex_lock_interruptible(&attr->mutex);
816 	if (ret)
817 		return ret;
818 
819 	ret = -EFAULT;
820 	size = min(sizeof(attr->set_buf) - 1, len);
821 	if (copy_from_user(attr->set_buf, buf, size))
822 		goto out;
823 
824 	attr->set_buf[size] = '\0';
825 	val = simple_strtol(attr->set_buf, NULL, 0);
826 	ret = attr->set(attr->data, val);
827 	if (ret == 0)
828 		ret = len; /* on success, claim we got the whole input */
829 out:
830 	mutex_unlock(&attr->mutex);
831 	return ret;
832 }
833 
834 /**
835  * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
836  * @sb:		filesystem to do the file handle conversion on
837  * @fid:	file handle to convert
838  * @fh_len:	length of the file handle in bytes
839  * @fh_type:	type of file handle
840  * @get_inode:	filesystem callback to retrieve inode
841  *
842  * This function decodes @fid as long as it has one of the well-known
843  * Linux filehandle types and calls @get_inode on it to retrieve the
844  * inode for the object specified in the file handle.
845  */
generic_fh_to_dentry(struct super_block * sb,struct fid * fid,int fh_len,int fh_type,struct inode * (* get_inode)(struct super_block * sb,u64 ino,u32 gen))846 struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid,
847 		int fh_len, int fh_type, struct inode *(*get_inode)
848 			(struct super_block *sb, u64 ino, u32 gen))
849 {
850 	struct inode *inode = NULL;
851 
852 	if (fh_len < 2)
853 		return NULL;
854 
855 	switch (fh_type) {
856 	case FILEID_INO32_GEN:
857 	case FILEID_INO32_GEN_PARENT:
858 		inode = get_inode(sb, fid->i32.ino, fid->i32.gen);
859 		break;
860 	}
861 
862 	return d_obtain_alias(inode);
863 }
864 EXPORT_SYMBOL_GPL(generic_fh_to_dentry);
865 
866 /**
867  * generic_fh_to_dentry - generic helper for the fh_to_parent export operation
868  * @sb:		filesystem to do the file handle conversion on
869  * @fid:	file handle to convert
870  * @fh_len:	length of the file handle in bytes
871  * @fh_type:	type of file handle
872  * @get_inode:	filesystem callback to retrieve inode
873  *
874  * This function decodes @fid as long as it has one of the well-known
875  * Linux filehandle types and calls @get_inode on it to retrieve the
876  * inode for the _parent_ object specified in the file handle if it
877  * is specified in the file handle, or NULL otherwise.
878  */
generic_fh_to_parent(struct super_block * sb,struct fid * fid,int fh_len,int fh_type,struct inode * (* get_inode)(struct super_block * sb,u64 ino,u32 gen))879 struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid,
880 		int fh_len, int fh_type, struct inode *(*get_inode)
881 			(struct super_block *sb, u64 ino, u32 gen))
882 {
883 	struct inode *inode = NULL;
884 
885 	if (fh_len <= 2)
886 		return NULL;
887 
888 	switch (fh_type) {
889 	case FILEID_INO32_GEN_PARENT:
890 		inode = get_inode(sb, fid->i32.parent_ino,
891 				  (fh_len > 3 ? fid->i32.parent_gen : 0));
892 		break;
893 	}
894 
895 	return d_obtain_alias(inode);
896 }
897 EXPORT_SYMBOL_GPL(generic_fh_to_parent);
898 
899 /**
900  * generic_file_fsync - generic fsync implementation for simple filesystems
901  * @file:	file to synchronize
902  * @datasync:	only synchronize essential metadata if true
903  *
904  * This is a generic implementation of the fsync method for simple
905  * filesystems which track all non-inode metadata in the buffers list
906  * hanging off the address_space structure.
907  */
generic_file_fsync(struct file * file,int datasync)908 int generic_file_fsync(struct file *file, int datasync)
909 {
910 	struct inode *inode = file->f_mapping->host;
911 	int err;
912 	int ret;
913 
914 	ret = sync_mapping_buffers(inode->i_mapping);
915 	if (!(inode->i_state & I_DIRTY))
916 		return ret;
917 	if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
918 		return ret;
919 
920 	err = sync_inode_metadata(inode, 1);
921 	if (ret == 0)
922 		ret = err;
923 	return ret;
924 }
925 EXPORT_SYMBOL(generic_file_fsync);
926 
927 /**
928  * generic_check_addressable - Check addressability of file system
929  * @blocksize_bits:	log of file system block size
930  * @num_blocks:		number of blocks in file system
931  *
932  * Determine whether a file system with @num_blocks blocks (and a
933  * block size of 2**@blocksize_bits) is addressable by the sector_t
934  * and page cache of the system.  Return 0 if so and -EFBIG otherwise.
935  */
generic_check_addressable(unsigned blocksize_bits,u64 num_blocks)936 int generic_check_addressable(unsigned blocksize_bits, u64 num_blocks)
937 {
938 	u64 last_fs_block = num_blocks - 1;
939 	u64 last_fs_page =
940 		last_fs_block >> (PAGE_CACHE_SHIFT - blocksize_bits);
941 
942 	if (unlikely(num_blocks == 0))
943 		return 0;
944 
945 	if ((blocksize_bits < 9) || (blocksize_bits > PAGE_CACHE_SHIFT))
946 		return -EINVAL;
947 
948 	if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) ||
949 	    (last_fs_page > (pgoff_t)(~0ULL))) {
950 		return -EFBIG;
951 	}
952 	return 0;
953 }
954 EXPORT_SYMBOL(generic_check_addressable);
955 
956 /*
957  * No-op implementation of ->fsync for in-memory filesystems.
958  */
noop_fsync(struct file * file,int datasync)959 int noop_fsync(struct file *file, int datasync)
960 {
961 	return 0;
962 }
963 
964 EXPORT_SYMBOL(dcache_dir_close);
965 EXPORT_SYMBOL(dcache_dir_lseek);
966 EXPORT_SYMBOL(dcache_dir_open);
967 EXPORT_SYMBOL(dcache_readdir);
968 EXPORT_SYMBOL(generic_read_dir);
969 EXPORT_SYMBOL(mount_pseudo);
970 EXPORT_SYMBOL(simple_write_begin);
971 EXPORT_SYMBOL(simple_write_end);
972 EXPORT_SYMBOL(simple_dir_inode_operations);
973 EXPORT_SYMBOL(simple_dir_operations);
974 EXPORT_SYMBOL(simple_empty);
975 EXPORT_SYMBOL(simple_fill_super);
976 EXPORT_SYMBOL(simple_getattr);
977 EXPORT_SYMBOL(simple_link);
978 EXPORT_SYMBOL(simple_lookup);
979 EXPORT_SYMBOL(simple_pin_fs);
980 EXPORT_SYMBOL(simple_readpage);
981 EXPORT_SYMBOL(simple_release_fs);
982 EXPORT_SYMBOL(simple_rename);
983 EXPORT_SYMBOL(simple_rmdir);
984 EXPORT_SYMBOL(simple_statfs);
985 EXPORT_SYMBOL(noop_fsync);
986 EXPORT_SYMBOL(simple_unlink);
987 EXPORT_SYMBOL(simple_read_from_buffer);
988 EXPORT_SYMBOL(simple_write_to_buffer);
989 EXPORT_SYMBOL(memory_read_from_buffer);
990 EXPORT_SYMBOL(simple_transaction_set);
991 EXPORT_SYMBOL(simple_transaction_get);
992 EXPORT_SYMBOL(simple_transaction_read);
993 EXPORT_SYMBOL(simple_transaction_release);
994 EXPORT_SYMBOL_GPL(simple_attr_open);
995 EXPORT_SYMBOL_GPL(simple_attr_release);
996 EXPORT_SYMBOL_GPL(simple_attr_read);
997 EXPORT_SYMBOL_GPL(simple_attr_write);
998