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