1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * fs/libfs.c 4 * Library for filesystems writers. 5 */ 6 7 #include <linux/blkdev.h> 8 #include <linux/export.h> 9 #include <linux/pagemap.h> 10 #include <linux/slab.h> 11 #include <linux/cred.h> 12 #include <linux/mount.h> 13 #include <linux/vfs.h> 14 #include <linux/quotaops.h> 15 #include <linux/mutex.h> 16 #include <linux/namei.h> 17 #include <linux/exportfs.h> 18 #include <linux/iversion.h> 19 #include <linux/writeback.h> 20 #include <linux/buffer_head.h> /* sync_mapping_buffers */ 21 #include <linux/fs_context.h> 22 #include <linux/pseudo_fs.h> 23 #include <linux/fsnotify.h> 24 #include <linux/unicode.h> 25 #include <linux/fscrypt.h> 26 27 #include <linux/uaccess.h> 28 29 #include "internal.h" 30 31 int simple_getattr(struct mnt_idmap *idmap, const struct path *path, 32 struct kstat *stat, u32 request_mask, 33 unsigned int query_flags) 34 { 35 struct inode *inode = d_inode(path->dentry); 36 generic_fillattr(&nop_mnt_idmap, inode, stat); 37 stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9); 38 return 0; 39 } 40 EXPORT_SYMBOL(simple_getattr); 41 42 int simple_statfs(struct dentry *dentry, struct kstatfs *buf) 43 { 44 buf->f_type = dentry->d_sb->s_magic; 45 buf->f_bsize = PAGE_SIZE; 46 buf->f_namelen = NAME_MAX; 47 return 0; 48 } 49 EXPORT_SYMBOL(simple_statfs); 50 51 /* 52 * Retaining negative dentries for an in-memory filesystem just wastes 53 * memory and lookup time: arrange for them to be deleted immediately. 54 */ 55 int always_delete_dentry(const struct dentry *dentry) 56 { 57 return 1; 58 } 59 EXPORT_SYMBOL(always_delete_dentry); 60 61 const struct dentry_operations simple_dentry_operations = { 62 .d_delete = always_delete_dentry, 63 }; 64 EXPORT_SYMBOL(simple_dentry_operations); 65 66 /* 67 * Lookup the data. This is trivial - if the dentry didn't already 68 * exist, we know it is negative. Set d_op to delete negative dentries. 69 */ 70 struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) 71 { 72 if (dentry->d_name.len > NAME_MAX) 73 return ERR_PTR(-ENAMETOOLONG); 74 if (!dentry->d_sb->s_d_op) 75 d_set_d_op(dentry, &simple_dentry_operations); 76 d_add(dentry, NULL); 77 return NULL; 78 } 79 EXPORT_SYMBOL(simple_lookup); 80 81 int dcache_dir_open(struct inode *inode, struct file *file) 82 { 83 file->private_data = d_alloc_cursor(file->f_path.dentry); 84 85 return file->private_data ? 0 : -ENOMEM; 86 } 87 EXPORT_SYMBOL(dcache_dir_open); 88 89 int dcache_dir_close(struct inode *inode, struct file *file) 90 { 91 dput(file->private_data); 92 return 0; 93 } 94 EXPORT_SYMBOL(dcache_dir_close); 95 96 /* parent is locked at least shared */ 97 /* 98 * Returns an element of siblings' list. 99 * We are looking for <count>th positive after <p>; if 100 * found, dentry is grabbed and returned to caller. 101 * If no such element exists, NULL is returned. 102 */ 103 static struct dentry *scan_positives(struct dentry *cursor, 104 struct list_head *p, 105 loff_t count, 106 struct dentry *last) 107 { 108 struct dentry *dentry = cursor->d_parent, *found = NULL; 109 110 spin_lock(&dentry->d_lock); 111 while ((p = p->next) != &dentry->d_subdirs) { 112 struct dentry *d = list_entry(p, struct dentry, d_child); 113 // we must at least skip cursors, to avoid livelocks 114 if (d->d_flags & DCACHE_DENTRY_CURSOR) 115 continue; 116 if (simple_positive(d) && !--count) { 117 spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); 118 if (simple_positive(d)) 119 found = dget_dlock(d); 120 spin_unlock(&d->d_lock); 121 if (likely(found)) 122 break; 123 count = 1; 124 } 125 if (need_resched()) { 126 list_move(&cursor->d_child, p); 127 p = &cursor->d_child; 128 spin_unlock(&dentry->d_lock); 129 cond_resched(); 130 spin_lock(&dentry->d_lock); 131 } 132 } 133 spin_unlock(&dentry->d_lock); 134 dput(last); 135 return found; 136 } 137 138 loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence) 139 { 140 struct dentry *dentry = file->f_path.dentry; 141 switch (whence) { 142 case 1: 143 offset += file->f_pos; 144 fallthrough; 145 case 0: 146 if (offset >= 0) 147 break; 148 fallthrough; 149 default: 150 return -EINVAL; 151 } 152 if (offset != file->f_pos) { 153 struct dentry *cursor = file->private_data; 154 struct dentry *to = NULL; 155 156 inode_lock_shared(dentry->d_inode); 157 158 if (offset > 2) 159 to = scan_positives(cursor, &dentry->d_subdirs, 160 offset - 2, NULL); 161 spin_lock(&dentry->d_lock); 162 if (to) 163 list_move(&cursor->d_child, &to->d_child); 164 else 165 list_del_init(&cursor->d_child); 166 spin_unlock(&dentry->d_lock); 167 dput(to); 168 169 file->f_pos = offset; 170 171 inode_unlock_shared(dentry->d_inode); 172 } 173 return offset; 174 } 175 EXPORT_SYMBOL(dcache_dir_lseek); 176 177 /* 178 * Directory is locked and all positive dentries in it are safe, since 179 * for ramfs-type trees they can't go away without unlink() or rmdir(), 180 * both impossible due to the lock on directory. 181 */ 182 183 int dcache_readdir(struct file *file, struct dir_context *ctx) 184 { 185 struct dentry *dentry = file->f_path.dentry; 186 struct dentry *cursor = file->private_data; 187 struct list_head *anchor = &dentry->d_subdirs; 188 struct dentry *next = NULL; 189 struct list_head *p; 190 191 if (!dir_emit_dots(file, ctx)) 192 return 0; 193 194 if (ctx->pos == 2) 195 p = anchor; 196 else if (!list_empty(&cursor->d_child)) 197 p = &cursor->d_child; 198 else 199 return 0; 200 201 while ((next = scan_positives(cursor, p, 1, next)) != NULL) { 202 if (!dir_emit(ctx, next->d_name.name, next->d_name.len, 203 d_inode(next)->i_ino, 204 fs_umode_to_dtype(d_inode(next)->i_mode))) 205 break; 206 ctx->pos++; 207 p = &next->d_child; 208 } 209 spin_lock(&dentry->d_lock); 210 if (next) 211 list_move_tail(&cursor->d_child, &next->d_child); 212 else 213 list_del_init(&cursor->d_child); 214 spin_unlock(&dentry->d_lock); 215 dput(next); 216 217 return 0; 218 } 219 EXPORT_SYMBOL(dcache_readdir); 220 221 ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos) 222 { 223 return -EISDIR; 224 } 225 EXPORT_SYMBOL(generic_read_dir); 226 227 const struct file_operations simple_dir_operations = { 228 .open = dcache_dir_open, 229 .release = dcache_dir_close, 230 .llseek = dcache_dir_lseek, 231 .read = generic_read_dir, 232 .iterate_shared = dcache_readdir, 233 .fsync = noop_fsync, 234 }; 235 EXPORT_SYMBOL(simple_dir_operations); 236 237 const struct inode_operations simple_dir_inode_operations = { 238 .lookup = simple_lookup, 239 }; 240 EXPORT_SYMBOL(simple_dir_inode_operations); 241 242 static struct dentry *find_next_child(struct dentry *parent, struct dentry *prev) 243 { 244 struct dentry *child = NULL; 245 struct list_head *p = prev ? &prev->d_child : &parent->d_subdirs; 246 247 spin_lock(&parent->d_lock); 248 while ((p = p->next) != &parent->d_subdirs) { 249 struct dentry *d = container_of(p, struct dentry, d_child); 250 if (simple_positive(d)) { 251 spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); 252 if (simple_positive(d)) 253 child = dget_dlock(d); 254 spin_unlock(&d->d_lock); 255 if (likely(child)) 256 break; 257 } 258 } 259 spin_unlock(&parent->d_lock); 260 dput(prev); 261 return child; 262 } 263 264 void simple_recursive_removal(struct dentry *dentry, 265 void (*callback)(struct dentry *)) 266 { 267 struct dentry *this = dget(dentry); 268 while (true) { 269 struct dentry *victim = NULL, *child; 270 struct inode *inode = this->d_inode; 271 272 inode_lock(inode); 273 if (d_is_dir(this)) 274 inode->i_flags |= S_DEAD; 275 while ((child = find_next_child(this, victim)) == NULL) { 276 // kill and ascend 277 // update metadata while it's still locked 278 inode->i_ctime = current_time(inode); 279 clear_nlink(inode); 280 inode_unlock(inode); 281 victim = this; 282 this = this->d_parent; 283 inode = this->d_inode; 284 inode_lock(inode); 285 if (simple_positive(victim)) { 286 d_invalidate(victim); // avoid lost mounts 287 if (d_is_dir(victim)) 288 fsnotify_rmdir(inode, victim); 289 else 290 fsnotify_unlink(inode, victim); 291 if (callback) 292 callback(victim); 293 dput(victim); // unpin it 294 } 295 if (victim == dentry) { 296 inode->i_ctime = inode->i_mtime = 297 current_time(inode); 298 if (d_is_dir(dentry)) 299 drop_nlink(inode); 300 inode_unlock(inode); 301 dput(dentry); 302 return; 303 } 304 } 305 inode_unlock(inode); 306 this = child; 307 } 308 } 309 EXPORT_SYMBOL(simple_recursive_removal); 310 311 static const struct super_operations simple_super_operations = { 312 .statfs = simple_statfs, 313 }; 314 315 static int pseudo_fs_fill_super(struct super_block *s, struct fs_context *fc) 316 { 317 struct pseudo_fs_context *ctx = fc->fs_private; 318 struct inode *root; 319 320 s->s_maxbytes = MAX_LFS_FILESIZE; 321 s->s_blocksize = PAGE_SIZE; 322 s->s_blocksize_bits = PAGE_SHIFT; 323 s->s_magic = ctx->magic; 324 s->s_op = ctx->ops ?: &simple_super_operations; 325 s->s_xattr = ctx->xattr; 326 s->s_time_gran = 1; 327 root = new_inode(s); 328 if (!root) 329 return -ENOMEM; 330 331 /* 332 * since this is the first inode, make it number 1. New inodes created 333 * after this must take care not to collide with it (by passing 334 * max_reserved of 1 to iunique). 335 */ 336 root->i_ino = 1; 337 root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR; 338 root->i_atime = root->i_mtime = root->i_ctime = current_time(root); 339 s->s_root = d_make_root(root); 340 if (!s->s_root) 341 return -ENOMEM; 342 s->s_d_op = ctx->dops; 343 return 0; 344 } 345 346 static int pseudo_fs_get_tree(struct fs_context *fc) 347 { 348 return get_tree_nodev(fc, pseudo_fs_fill_super); 349 } 350 351 static void pseudo_fs_free(struct fs_context *fc) 352 { 353 kfree(fc->fs_private); 354 } 355 356 static const struct fs_context_operations pseudo_fs_context_ops = { 357 .free = pseudo_fs_free, 358 .get_tree = pseudo_fs_get_tree, 359 }; 360 361 /* 362 * Common helper for pseudo-filesystems (sockfs, pipefs, bdev - stuff that 363 * will never be mountable) 364 */ 365 struct pseudo_fs_context *init_pseudo(struct fs_context *fc, 366 unsigned long magic) 367 { 368 struct pseudo_fs_context *ctx; 369 370 ctx = kzalloc(sizeof(struct pseudo_fs_context), GFP_KERNEL); 371 if (likely(ctx)) { 372 ctx->magic = magic; 373 fc->fs_private = ctx; 374 fc->ops = &pseudo_fs_context_ops; 375 fc->sb_flags |= SB_NOUSER; 376 fc->global = true; 377 } 378 return ctx; 379 } 380 EXPORT_SYMBOL(init_pseudo); 381 382 int simple_open(struct inode *inode, struct file *file) 383 { 384 if (inode->i_private) 385 file->private_data = inode->i_private; 386 return 0; 387 } 388 EXPORT_SYMBOL(simple_open); 389 390 int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) 391 { 392 struct inode *inode = d_inode(old_dentry); 393 394 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode); 395 inc_nlink(inode); 396 ihold(inode); 397 dget(dentry); 398 d_instantiate(dentry, inode); 399 return 0; 400 } 401 EXPORT_SYMBOL(simple_link); 402 403 int simple_empty(struct dentry *dentry) 404 { 405 struct dentry *child; 406 int ret = 0; 407 408 spin_lock(&dentry->d_lock); 409 list_for_each_entry(child, &dentry->d_subdirs, d_child) { 410 spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED); 411 if (simple_positive(child)) { 412 spin_unlock(&child->d_lock); 413 goto out; 414 } 415 spin_unlock(&child->d_lock); 416 } 417 ret = 1; 418 out: 419 spin_unlock(&dentry->d_lock); 420 return ret; 421 } 422 EXPORT_SYMBOL(simple_empty); 423 424 int simple_unlink(struct inode *dir, struct dentry *dentry) 425 { 426 struct inode *inode = d_inode(dentry); 427 428 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode); 429 drop_nlink(inode); 430 dput(dentry); 431 return 0; 432 } 433 EXPORT_SYMBOL(simple_unlink); 434 435 int simple_rmdir(struct inode *dir, struct dentry *dentry) 436 { 437 if (!simple_empty(dentry)) 438 return -ENOTEMPTY; 439 440 drop_nlink(d_inode(dentry)); 441 simple_unlink(dir, dentry); 442 drop_nlink(dir); 443 return 0; 444 } 445 EXPORT_SYMBOL(simple_rmdir); 446 447 int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry, 448 struct inode *new_dir, struct dentry *new_dentry) 449 { 450 bool old_is_dir = d_is_dir(old_dentry); 451 bool new_is_dir = d_is_dir(new_dentry); 452 453 if (old_dir != new_dir && old_is_dir != new_is_dir) { 454 if (old_is_dir) { 455 drop_nlink(old_dir); 456 inc_nlink(new_dir); 457 } else { 458 drop_nlink(new_dir); 459 inc_nlink(old_dir); 460 } 461 } 462 old_dir->i_ctime = old_dir->i_mtime = 463 new_dir->i_ctime = new_dir->i_mtime = 464 d_inode(old_dentry)->i_ctime = 465 d_inode(new_dentry)->i_ctime = current_time(old_dir); 466 467 return 0; 468 } 469 EXPORT_SYMBOL_GPL(simple_rename_exchange); 470 471 int simple_rename(struct mnt_idmap *idmap, struct inode *old_dir, 472 struct dentry *old_dentry, struct inode *new_dir, 473 struct dentry *new_dentry, unsigned int flags) 474 { 475 struct inode *inode = d_inode(old_dentry); 476 int they_are_dirs = d_is_dir(old_dentry); 477 478 if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE)) 479 return -EINVAL; 480 481 if (flags & RENAME_EXCHANGE) 482 return simple_rename_exchange(old_dir, old_dentry, new_dir, new_dentry); 483 484 if (!simple_empty(new_dentry)) 485 return -ENOTEMPTY; 486 487 if (d_really_is_positive(new_dentry)) { 488 simple_unlink(new_dir, new_dentry); 489 if (they_are_dirs) { 490 drop_nlink(d_inode(new_dentry)); 491 drop_nlink(old_dir); 492 } 493 } else if (they_are_dirs) { 494 drop_nlink(old_dir); 495 inc_nlink(new_dir); 496 } 497 498 old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime = 499 new_dir->i_mtime = inode->i_ctime = current_time(old_dir); 500 501 return 0; 502 } 503 EXPORT_SYMBOL(simple_rename); 504 505 /** 506 * simple_setattr - setattr for simple filesystem 507 * @idmap: idmap of the target mount 508 * @dentry: dentry 509 * @iattr: iattr structure 510 * 511 * Returns 0 on success, -error on failure. 512 * 513 * simple_setattr is a simple ->setattr implementation without a proper 514 * implementation of size changes. 515 * 516 * It can either be used for in-memory filesystems or special files 517 * on simple regular filesystems. Anything that needs to change on-disk 518 * or wire state on size changes needs its own setattr method. 519 */ 520 int simple_setattr(struct mnt_idmap *idmap, struct dentry *dentry, 521 struct iattr *iattr) 522 { 523 struct inode *inode = d_inode(dentry); 524 int error; 525 526 error = setattr_prepare(idmap, dentry, iattr); 527 if (error) 528 return error; 529 530 if (iattr->ia_valid & ATTR_SIZE) 531 truncate_setsize(inode, iattr->ia_size); 532 setattr_copy(idmap, inode, iattr); 533 mark_inode_dirty(inode); 534 return 0; 535 } 536 EXPORT_SYMBOL(simple_setattr); 537 538 static int simple_read_folio(struct file *file, struct folio *folio) 539 { 540 folio_zero_range(folio, 0, folio_size(folio)); 541 flush_dcache_folio(folio); 542 folio_mark_uptodate(folio); 543 folio_unlock(folio); 544 return 0; 545 } 546 547 int simple_write_begin(struct file *file, struct address_space *mapping, 548 loff_t pos, unsigned len, 549 struct page **pagep, void **fsdata) 550 { 551 struct page *page; 552 pgoff_t index; 553 554 index = pos >> PAGE_SHIFT; 555 556 page = grab_cache_page_write_begin(mapping, index); 557 if (!page) 558 return -ENOMEM; 559 560 *pagep = page; 561 562 if (!PageUptodate(page) && (len != PAGE_SIZE)) { 563 unsigned from = pos & (PAGE_SIZE - 1); 564 565 zero_user_segments(page, 0, from, from + len, PAGE_SIZE); 566 } 567 return 0; 568 } 569 EXPORT_SYMBOL(simple_write_begin); 570 571 /** 572 * simple_write_end - .write_end helper for non-block-device FSes 573 * @file: See .write_end of address_space_operations 574 * @mapping: " 575 * @pos: " 576 * @len: " 577 * @copied: " 578 * @page: " 579 * @fsdata: " 580 * 581 * simple_write_end does the minimum needed for updating a page after writing is 582 * done. It has the same API signature as the .write_end of 583 * address_space_operations vector. So it can just be set onto .write_end for 584 * FSes that don't need any other processing. i_mutex is assumed to be held. 585 * Block based filesystems should use generic_write_end(). 586 * NOTE: Even though i_size might get updated by this function, mark_inode_dirty 587 * is not called, so a filesystem that actually does store data in .write_inode 588 * should extend on what's done here with a call to mark_inode_dirty() in the 589 * case that i_size has changed. 590 * 591 * Use *ONLY* with simple_read_folio() 592 */ 593 static int simple_write_end(struct file *file, struct address_space *mapping, 594 loff_t pos, unsigned len, unsigned copied, 595 struct page *page, void *fsdata) 596 { 597 struct inode *inode = page->mapping->host; 598 loff_t last_pos = pos + copied; 599 600 /* zero the stale part of the page if we did a short copy */ 601 if (!PageUptodate(page)) { 602 if (copied < len) { 603 unsigned from = pos & (PAGE_SIZE - 1); 604 605 zero_user(page, from + copied, len - copied); 606 } 607 SetPageUptodate(page); 608 } 609 /* 610 * No need to use i_size_read() here, the i_size 611 * cannot change under us because we hold the i_mutex. 612 */ 613 if (last_pos > inode->i_size) 614 i_size_write(inode, last_pos); 615 616 set_page_dirty(page); 617 unlock_page(page); 618 put_page(page); 619 620 return copied; 621 } 622 623 /* 624 * Provides ramfs-style behavior: data in the pagecache, but no writeback. 625 */ 626 const struct address_space_operations ram_aops = { 627 .read_folio = simple_read_folio, 628 .write_begin = simple_write_begin, 629 .write_end = simple_write_end, 630 .dirty_folio = noop_dirty_folio, 631 }; 632 EXPORT_SYMBOL(ram_aops); 633 634 /* 635 * the inodes created here are not hashed. If you use iunique to generate 636 * unique inode values later for this filesystem, then you must take care 637 * to pass it an appropriate max_reserved value to avoid collisions. 638 */ 639 int simple_fill_super(struct super_block *s, unsigned long magic, 640 const struct tree_descr *files) 641 { 642 struct inode *inode; 643 struct dentry *root; 644 struct dentry *dentry; 645 int i; 646 647 s->s_blocksize = PAGE_SIZE; 648 s->s_blocksize_bits = PAGE_SHIFT; 649 s->s_magic = magic; 650 s->s_op = &simple_super_operations; 651 s->s_time_gran = 1; 652 653 inode = new_inode(s); 654 if (!inode) 655 return -ENOMEM; 656 /* 657 * because the root inode is 1, the files array must not contain an 658 * entry at index 1 659 */ 660 inode->i_ino = 1; 661 inode->i_mode = S_IFDIR | 0755; 662 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); 663 inode->i_op = &simple_dir_inode_operations; 664 inode->i_fop = &simple_dir_operations; 665 set_nlink(inode, 2); 666 root = d_make_root(inode); 667 if (!root) 668 return -ENOMEM; 669 for (i = 0; !files->name || files->name[0]; i++, files++) { 670 if (!files->name) 671 continue; 672 673 /* warn if it tries to conflict with the root inode */ 674 if (unlikely(i == 1)) 675 printk(KERN_WARNING "%s: %s passed in a files array" 676 "with an index of 1!\n", __func__, 677 s->s_type->name); 678 679 dentry = d_alloc_name(root, files->name); 680 if (!dentry) 681 goto out; 682 inode = new_inode(s); 683 if (!inode) { 684 dput(dentry); 685 goto out; 686 } 687 inode->i_mode = S_IFREG | files->mode; 688 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); 689 inode->i_fop = files->ops; 690 inode->i_ino = i; 691 d_add(dentry, inode); 692 } 693 s->s_root = root; 694 return 0; 695 out: 696 d_genocide(root); 697 shrink_dcache_parent(root); 698 dput(root); 699 return -ENOMEM; 700 } 701 EXPORT_SYMBOL(simple_fill_super); 702 703 static DEFINE_SPINLOCK(pin_fs_lock); 704 705 int simple_pin_fs(struct file_system_type *type, struct vfsmount **mount, int *count) 706 { 707 struct vfsmount *mnt = NULL; 708 spin_lock(&pin_fs_lock); 709 if (unlikely(!*mount)) { 710 spin_unlock(&pin_fs_lock); 711 mnt = vfs_kern_mount(type, SB_KERNMOUNT, type->name, NULL); 712 if (IS_ERR(mnt)) 713 return PTR_ERR(mnt); 714 spin_lock(&pin_fs_lock); 715 if (!*mount) 716 *mount = mnt; 717 } 718 mntget(*mount); 719 ++*count; 720 spin_unlock(&pin_fs_lock); 721 mntput(mnt); 722 return 0; 723 } 724 EXPORT_SYMBOL(simple_pin_fs); 725 726 void simple_release_fs(struct vfsmount **mount, int *count) 727 { 728 struct vfsmount *mnt; 729 spin_lock(&pin_fs_lock); 730 mnt = *mount; 731 if (!--*count) 732 *mount = NULL; 733 spin_unlock(&pin_fs_lock); 734 mntput(mnt); 735 } 736 EXPORT_SYMBOL(simple_release_fs); 737 738 /** 739 * simple_read_from_buffer - copy data from the buffer to user space 740 * @to: the user space buffer to read to 741 * @count: the maximum number of bytes to read 742 * @ppos: the current position in the buffer 743 * @from: the buffer to read from 744 * @available: the size of the buffer 745 * 746 * The simple_read_from_buffer() function reads up to @count bytes from the 747 * buffer @from at offset @ppos into the user space address starting at @to. 748 * 749 * On success, the number of bytes read is returned and the offset @ppos is 750 * advanced by this number, or negative value is returned on error. 751 **/ 752 ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos, 753 const void *from, size_t available) 754 { 755 loff_t pos = *ppos; 756 size_t ret; 757 758 if (pos < 0) 759 return -EINVAL; 760 if (pos >= available || !count) 761 return 0; 762 if (count > available - pos) 763 count = available - pos; 764 ret = copy_to_user(to, from + pos, count); 765 if (ret == count) 766 return -EFAULT; 767 count -= ret; 768 *ppos = pos + count; 769 return count; 770 } 771 EXPORT_SYMBOL(simple_read_from_buffer); 772 773 /** 774 * simple_write_to_buffer - copy data from user space to the buffer 775 * @to: the buffer to write to 776 * @available: the size of the buffer 777 * @ppos: the current position in the buffer 778 * @from: the user space buffer to read from 779 * @count: the maximum number of bytes to read 780 * 781 * The simple_write_to_buffer() function reads up to @count bytes from the user 782 * space address starting at @from into the buffer @to at offset @ppos. 783 * 784 * On success, the number of bytes written is returned and the offset @ppos is 785 * advanced by this number, or negative value is returned on error. 786 **/ 787 ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos, 788 const void __user *from, size_t count) 789 { 790 loff_t pos = *ppos; 791 size_t res; 792 793 if (pos < 0) 794 return -EINVAL; 795 if (pos >= available || !count) 796 return 0; 797 if (count > available - pos) 798 count = available - pos; 799 res = copy_from_user(to + pos, from, count); 800 if (res == count) 801 return -EFAULT; 802 count -= res; 803 *ppos = pos + count; 804 return count; 805 } 806 EXPORT_SYMBOL(simple_write_to_buffer); 807 808 /** 809 * memory_read_from_buffer - copy data from the buffer 810 * @to: the kernel space buffer to read to 811 * @count: the maximum number of bytes to read 812 * @ppos: the current position in the buffer 813 * @from: the buffer to read from 814 * @available: the size of the buffer 815 * 816 * The memory_read_from_buffer() function reads up to @count bytes from the 817 * buffer @from at offset @ppos into the kernel space address starting at @to. 818 * 819 * On success, the number of bytes read is returned and the offset @ppos is 820 * advanced by this number, or negative value is returned on error. 821 **/ 822 ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, 823 const void *from, size_t available) 824 { 825 loff_t pos = *ppos; 826 827 if (pos < 0) 828 return -EINVAL; 829 if (pos >= available) 830 return 0; 831 if (count > available - pos) 832 count = available - pos; 833 memcpy(to, from + pos, count); 834 *ppos = pos + count; 835 836 return count; 837 } 838 EXPORT_SYMBOL(memory_read_from_buffer); 839 840 /* 841 * Transaction based IO. 842 * The file expects a single write which triggers the transaction, and then 843 * possibly a read which collects the result - which is stored in a 844 * file-local buffer. 845 */ 846 847 void simple_transaction_set(struct file *file, size_t n) 848 { 849 struct simple_transaction_argresp *ar = file->private_data; 850 851 BUG_ON(n > SIMPLE_TRANSACTION_LIMIT); 852 853 /* 854 * The barrier ensures that ar->size will really remain zero until 855 * ar->data is ready for reading. 856 */ 857 smp_mb(); 858 ar->size = n; 859 } 860 EXPORT_SYMBOL(simple_transaction_set); 861 862 char *simple_transaction_get(struct file *file, const char __user *buf, size_t size) 863 { 864 struct simple_transaction_argresp *ar; 865 static DEFINE_SPINLOCK(simple_transaction_lock); 866 867 if (size > SIMPLE_TRANSACTION_LIMIT - 1) 868 return ERR_PTR(-EFBIG); 869 870 ar = (struct simple_transaction_argresp *)get_zeroed_page(GFP_KERNEL); 871 if (!ar) 872 return ERR_PTR(-ENOMEM); 873 874 spin_lock(&simple_transaction_lock); 875 876 /* only one write allowed per open */ 877 if (file->private_data) { 878 spin_unlock(&simple_transaction_lock); 879 free_page((unsigned long)ar); 880 return ERR_PTR(-EBUSY); 881 } 882 883 file->private_data = ar; 884 885 spin_unlock(&simple_transaction_lock); 886 887 if (copy_from_user(ar->data, buf, size)) 888 return ERR_PTR(-EFAULT); 889 890 return ar->data; 891 } 892 EXPORT_SYMBOL(simple_transaction_get); 893 894 ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos) 895 { 896 struct simple_transaction_argresp *ar = file->private_data; 897 898 if (!ar) 899 return 0; 900 return simple_read_from_buffer(buf, size, pos, ar->data, ar->size); 901 } 902 EXPORT_SYMBOL(simple_transaction_read); 903 904 int simple_transaction_release(struct inode *inode, struct file *file) 905 { 906 free_page((unsigned long)file->private_data); 907 return 0; 908 } 909 EXPORT_SYMBOL(simple_transaction_release); 910 911 /* Simple attribute files */ 912 913 struct simple_attr { 914 int (*get)(void *, u64 *); 915 int (*set)(void *, u64); 916 char get_buf[24]; /* enough to store a u64 and "\n\0" */ 917 char set_buf[24]; 918 void *data; 919 const char *fmt; /* format for read operation */ 920 struct mutex mutex; /* protects access to these buffers */ 921 }; 922 923 /* simple_attr_open is called by an actual attribute open file operation 924 * to set the attribute specific access operations. */ 925 int simple_attr_open(struct inode *inode, struct file *file, 926 int (*get)(void *, u64 *), int (*set)(void *, u64), 927 const char *fmt) 928 { 929 struct simple_attr *attr; 930 931 attr = kzalloc(sizeof(*attr), GFP_KERNEL); 932 if (!attr) 933 return -ENOMEM; 934 935 attr->get = get; 936 attr->set = set; 937 attr->data = inode->i_private; 938 attr->fmt = fmt; 939 mutex_init(&attr->mutex); 940 941 file->private_data = attr; 942 943 return nonseekable_open(inode, file); 944 } 945 EXPORT_SYMBOL_GPL(simple_attr_open); 946 947 int simple_attr_release(struct inode *inode, struct file *file) 948 { 949 kfree(file->private_data); 950 return 0; 951 } 952 EXPORT_SYMBOL_GPL(simple_attr_release); /* GPL-only? This? Really? */ 953 954 /* read from the buffer that is filled with the get function */ 955 ssize_t simple_attr_read(struct file *file, char __user *buf, 956 size_t len, loff_t *ppos) 957 { 958 struct simple_attr *attr; 959 size_t size; 960 ssize_t ret; 961 962 attr = file->private_data; 963 964 if (!attr->get) 965 return -EACCES; 966 967 ret = mutex_lock_interruptible(&attr->mutex); 968 if (ret) 969 return ret; 970 971 if (*ppos && attr->get_buf[0]) { 972 /* continued read */ 973 size = strlen(attr->get_buf); 974 } else { 975 /* first read */ 976 u64 val; 977 ret = attr->get(attr->data, &val); 978 if (ret) 979 goto out; 980 981 size = scnprintf(attr->get_buf, sizeof(attr->get_buf), 982 attr->fmt, (unsigned long long)val); 983 } 984 985 ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size); 986 out: 987 mutex_unlock(&attr->mutex); 988 return ret; 989 } 990 EXPORT_SYMBOL_GPL(simple_attr_read); 991 992 /* interpret the buffer as a number to call the set function with */ 993 static ssize_t simple_attr_write_xsigned(struct file *file, const char __user *buf, 994 size_t len, loff_t *ppos, bool is_signed) 995 { 996 struct simple_attr *attr; 997 unsigned long long val; 998 size_t size; 999 ssize_t ret; 1000 1001 attr = file->private_data; 1002 if (!attr->set) 1003 return -EACCES; 1004 1005 ret = mutex_lock_interruptible(&attr->mutex); 1006 if (ret) 1007 return ret; 1008 1009 ret = -EFAULT; 1010 size = min(sizeof(attr->set_buf) - 1, len); 1011 if (copy_from_user(attr->set_buf, buf, size)) 1012 goto out; 1013 1014 attr->set_buf[size] = '\0'; 1015 if (is_signed) 1016 ret = kstrtoll(attr->set_buf, 0, &val); 1017 else 1018 ret = kstrtoull(attr->set_buf, 0, &val); 1019 if (ret) 1020 goto out; 1021 ret = attr->set(attr->data, val); 1022 if (ret == 0) 1023 ret = len; /* on success, claim we got the whole input */ 1024 out: 1025 mutex_unlock(&attr->mutex); 1026 return ret; 1027 } 1028 1029 ssize_t simple_attr_write(struct file *file, const char __user *buf, 1030 size_t len, loff_t *ppos) 1031 { 1032 return simple_attr_write_xsigned(file, buf, len, ppos, false); 1033 } 1034 EXPORT_SYMBOL_GPL(simple_attr_write); 1035 1036 ssize_t simple_attr_write_signed(struct file *file, const char __user *buf, 1037 size_t len, loff_t *ppos) 1038 { 1039 return simple_attr_write_xsigned(file, buf, len, ppos, true); 1040 } 1041 EXPORT_SYMBOL_GPL(simple_attr_write_signed); 1042 1043 /** 1044 * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation 1045 * @sb: filesystem to do the file handle conversion on 1046 * @fid: file handle to convert 1047 * @fh_len: length of the file handle in bytes 1048 * @fh_type: type of file handle 1049 * @get_inode: filesystem callback to retrieve inode 1050 * 1051 * This function decodes @fid as long as it has one of the well-known 1052 * Linux filehandle types and calls @get_inode on it to retrieve the 1053 * inode for the object specified in the file handle. 1054 */ 1055 struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid, 1056 int fh_len, int fh_type, struct inode *(*get_inode) 1057 (struct super_block *sb, u64 ino, u32 gen)) 1058 { 1059 struct inode *inode = NULL; 1060 1061 if (fh_len < 2) 1062 return NULL; 1063 1064 switch (fh_type) { 1065 case FILEID_INO32_GEN: 1066 case FILEID_INO32_GEN_PARENT: 1067 inode = get_inode(sb, fid->i32.ino, fid->i32.gen); 1068 break; 1069 } 1070 1071 return d_obtain_alias(inode); 1072 } 1073 EXPORT_SYMBOL_GPL(generic_fh_to_dentry); 1074 1075 /** 1076 * generic_fh_to_parent - generic helper for the fh_to_parent export operation 1077 * @sb: filesystem to do the file handle conversion on 1078 * @fid: file handle to convert 1079 * @fh_len: length of the file handle in bytes 1080 * @fh_type: type of file handle 1081 * @get_inode: filesystem callback to retrieve inode 1082 * 1083 * This function decodes @fid as long as it has one of the well-known 1084 * Linux filehandle types and calls @get_inode on it to retrieve the 1085 * inode for the _parent_ object specified in the file handle if it 1086 * is specified in the file handle, or NULL otherwise. 1087 */ 1088 struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid, 1089 int fh_len, int fh_type, struct inode *(*get_inode) 1090 (struct super_block *sb, u64 ino, u32 gen)) 1091 { 1092 struct inode *inode = NULL; 1093 1094 if (fh_len <= 2) 1095 return NULL; 1096 1097 switch (fh_type) { 1098 case FILEID_INO32_GEN_PARENT: 1099 inode = get_inode(sb, fid->i32.parent_ino, 1100 (fh_len > 3 ? fid->i32.parent_gen : 0)); 1101 break; 1102 } 1103 1104 return d_obtain_alias(inode); 1105 } 1106 EXPORT_SYMBOL_GPL(generic_fh_to_parent); 1107 1108 /** 1109 * __generic_file_fsync - generic fsync implementation for simple filesystems 1110 * 1111 * @file: file to synchronize 1112 * @start: start offset in bytes 1113 * @end: end offset in bytes (inclusive) 1114 * @datasync: only synchronize essential metadata if true 1115 * 1116 * This is a generic implementation of the fsync method for simple 1117 * filesystems which track all non-inode metadata in the buffers list 1118 * hanging off the address_space structure. 1119 */ 1120 int __generic_file_fsync(struct file *file, loff_t start, loff_t end, 1121 int datasync) 1122 { 1123 struct inode *inode = file->f_mapping->host; 1124 int err; 1125 int ret; 1126 1127 err = file_write_and_wait_range(file, start, end); 1128 if (err) 1129 return err; 1130 1131 inode_lock(inode); 1132 ret = sync_mapping_buffers(inode->i_mapping); 1133 if (!(inode->i_state & I_DIRTY_ALL)) 1134 goto out; 1135 if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) 1136 goto out; 1137 1138 err = sync_inode_metadata(inode, 1); 1139 if (ret == 0) 1140 ret = err; 1141 1142 out: 1143 inode_unlock(inode); 1144 /* check and advance again to catch errors after syncing out buffers */ 1145 err = file_check_and_advance_wb_err(file); 1146 if (ret == 0) 1147 ret = err; 1148 return ret; 1149 } 1150 EXPORT_SYMBOL(__generic_file_fsync); 1151 1152 /** 1153 * generic_file_fsync - generic fsync implementation for simple filesystems 1154 * with flush 1155 * @file: file to synchronize 1156 * @start: start offset in bytes 1157 * @end: end offset in bytes (inclusive) 1158 * @datasync: only synchronize essential metadata if true 1159 * 1160 */ 1161 1162 int generic_file_fsync(struct file *file, loff_t start, loff_t end, 1163 int datasync) 1164 { 1165 struct inode *inode = file->f_mapping->host; 1166 int err; 1167 1168 err = __generic_file_fsync(file, start, end, datasync); 1169 if (err) 1170 return err; 1171 return blkdev_issue_flush(inode->i_sb->s_bdev); 1172 } 1173 EXPORT_SYMBOL(generic_file_fsync); 1174 1175 /** 1176 * generic_check_addressable - Check addressability of file system 1177 * @blocksize_bits: log of file system block size 1178 * @num_blocks: number of blocks in file system 1179 * 1180 * Determine whether a file system with @num_blocks blocks (and a 1181 * block size of 2**@blocksize_bits) is addressable by the sector_t 1182 * and page cache of the system. Return 0 if so and -EFBIG otherwise. 1183 */ 1184 int generic_check_addressable(unsigned blocksize_bits, u64 num_blocks) 1185 { 1186 u64 last_fs_block = num_blocks - 1; 1187 u64 last_fs_page = 1188 last_fs_block >> (PAGE_SHIFT - blocksize_bits); 1189 1190 if (unlikely(num_blocks == 0)) 1191 return 0; 1192 1193 if ((blocksize_bits < 9) || (blocksize_bits > PAGE_SHIFT)) 1194 return -EINVAL; 1195 1196 if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) || 1197 (last_fs_page > (pgoff_t)(~0ULL))) { 1198 return -EFBIG; 1199 } 1200 return 0; 1201 } 1202 EXPORT_SYMBOL(generic_check_addressable); 1203 1204 /* 1205 * No-op implementation of ->fsync for in-memory filesystems. 1206 */ 1207 int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync) 1208 { 1209 return 0; 1210 } 1211 EXPORT_SYMBOL(noop_fsync); 1212 1213 ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter) 1214 { 1215 /* 1216 * iomap based filesystems support direct I/O without need for 1217 * this callback. However, it still needs to be set in 1218 * inode->a_ops so that open/fcntl know that direct I/O is 1219 * generally supported. 1220 */ 1221 return -EINVAL; 1222 } 1223 EXPORT_SYMBOL_GPL(noop_direct_IO); 1224 1225 /* Because kfree isn't assignment-compatible with void(void*) ;-/ */ 1226 void kfree_link(void *p) 1227 { 1228 kfree(p); 1229 } 1230 EXPORT_SYMBOL(kfree_link); 1231 1232 struct inode *alloc_anon_inode(struct super_block *s) 1233 { 1234 static const struct address_space_operations anon_aops = { 1235 .dirty_folio = noop_dirty_folio, 1236 }; 1237 struct inode *inode = new_inode_pseudo(s); 1238 1239 if (!inode) 1240 return ERR_PTR(-ENOMEM); 1241 1242 inode->i_ino = get_next_ino(); 1243 inode->i_mapping->a_ops = &anon_aops; 1244 1245 /* 1246 * Mark the inode dirty from the very beginning, 1247 * that way it will never be moved to the dirty 1248 * list because mark_inode_dirty() will think 1249 * that it already _is_ on the dirty list. 1250 */ 1251 inode->i_state = I_DIRTY; 1252 inode->i_mode = S_IRUSR | S_IWUSR; 1253 inode->i_uid = current_fsuid(); 1254 inode->i_gid = current_fsgid(); 1255 inode->i_flags |= S_PRIVATE; 1256 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); 1257 return inode; 1258 } 1259 EXPORT_SYMBOL(alloc_anon_inode); 1260 1261 /** 1262 * simple_nosetlease - generic helper for prohibiting leases 1263 * @filp: file pointer 1264 * @arg: type of lease to obtain 1265 * @flp: new lease supplied for insertion 1266 * @priv: private data for lm_setup operation 1267 * 1268 * Generic helper for filesystems that do not wish to allow leases to be set. 1269 * All arguments are ignored and it just returns -EINVAL. 1270 */ 1271 int 1272 simple_nosetlease(struct file *filp, long arg, struct file_lock **flp, 1273 void **priv) 1274 { 1275 return -EINVAL; 1276 } 1277 EXPORT_SYMBOL(simple_nosetlease); 1278 1279 /** 1280 * simple_get_link - generic helper to get the target of "fast" symlinks 1281 * @dentry: not used here 1282 * @inode: the symlink inode 1283 * @done: not used here 1284 * 1285 * Generic helper for filesystems to use for symlink inodes where a pointer to 1286 * the symlink target is stored in ->i_link. NOTE: this isn't normally called, 1287 * since as an optimization the path lookup code uses any non-NULL ->i_link 1288 * directly, without calling ->get_link(). But ->get_link() still must be set, 1289 * to mark the inode_operations as being for a symlink. 1290 * 1291 * Return: the symlink target 1292 */ 1293 const char *simple_get_link(struct dentry *dentry, struct inode *inode, 1294 struct delayed_call *done) 1295 { 1296 return inode->i_link; 1297 } 1298 EXPORT_SYMBOL(simple_get_link); 1299 1300 const struct inode_operations simple_symlink_inode_operations = { 1301 .get_link = simple_get_link, 1302 }; 1303 EXPORT_SYMBOL(simple_symlink_inode_operations); 1304 1305 /* 1306 * Operations for a permanently empty directory. 1307 */ 1308 static struct dentry *empty_dir_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) 1309 { 1310 return ERR_PTR(-ENOENT); 1311 } 1312 1313 static int empty_dir_getattr(struct mnt_idmap *idmap, 1314 const struct path *path, struct kstat *stat, 1315 u32 request_mask, unsigned int query_flags) 1316 { 1317 struct inode *inode = d_inode(path->dentry); 1318 generic_fillattr(&nop_mnt_idmap, inode, stat); 1319 return 0; 1320 } 1321 1322 static int empty_dir_setattr(struct mnt_idmap *idmap, 1323 struct dentry *dentry, struct iattr *attr) 1324 { 1325 return -EPERM; 1326 } 1327 1328 static ssize_t empty_dir_listxattr(struct dentry *dentry, char *list, size_t size) 1329 { 1330 return -EOPNOTSUPP; 1331 } 1332 1333 static const struct inode_operations empty_dir_inode_operations = { 1334 .lookup = empty_dir_lookup, 1335 .permission = generic_permission, 1336 .setattr = empty_dir_setattr, 1337 .getattr = empty_dir_getattr, 1338 .listxattr = empty_dir_listxattr, 1339 }; 1340 1341 static loff_t empty_dir_llseek(struct file *file, loff_t offset, int whence) 1342 { 1343 /* An empty directory has two entries . and .. at offsets 0 and 1 */ 1344 return generic_file_llseek_size(file, offset, whence, 2, 2); 1345 } 1346 1347 static int empty_dir_readdir(struct file *file, struct dir_context *ctx) 1348 { 1349 dir_emit_dots(file, ctx); 1350 return 0; 1351 } 1352 1353 static const struct file_operations empty_dir_operations = { 1354 .llseek = empty_dir_llseek, 1355 .read = generic_read_dir, 1356 .iterate_shared = empty_dir_readdir, 1357 .fsync = noop_fsync, 1358 }; 1359 1360 1361 void make_empty_dir_inode(struct inode *inode) 1362 { 1363 set_nlink(inode, 2); 1364 inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; 1365 inode->i_uid = GLOBAL_ROOT_UID; 1366 inode->i_gid = GLOBAL_ROOT_GID; 1367 inode->i_rdev = 0; 1368 inode->i_size = 0; 1369 inode->i_blkbits = PAGE_SHIFT; 1370 inode->i_blocks = 0; 1371 1372 inode->i_op = &empty_dir_inode_operations; 1373 inode->i_opflags &= ~IOP_XATTR; 1374 inode->i_fop = &empty_dir_operations; 1375 } 1376 1377 bool is_empty_dir_inode(struct inode *inode) 1378 { 1379 return (inode->i_fop == &empty_dir_operations) && 1380 (inode->i_op == &empty_dir_inode_operations); 1381 } 1382 1383 #if IS_ENABLED(CONFIG_UNICODE) 1384 /* 1385 * Determine if the name of a dentry should be casefolded. 1386 * 1387 * Return: if names will need casefolding 1388 */ 1389 static bool needs_casefold(const struct inode *dir) 1390 { 1391 return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding; 1392 } 1393 1394 /** 1395 * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems 1396 * @dentry: dentry whose name we are checking against 1397 * @len: len of name of dentry 1398 * @str: str pointer to name of dentry 1399 * @name: Name to compare against 1400 * 1401 * Return: 0 if names match, 1 if mismatch, or -ERRNO 1402 */ 1403 static int generic_ci_d_compare(const struct dentry *dentry, unsigned int len, 1404 const char *str, const struct qstr *name) 1405 { 1406 const struct dentry *parent = READ_ONCE(dentry->d_parent); 1407 const struct inode *dir = READ_ONCE(parent->d_inode); 1408 const struct super_block *sb = dentry->d_sb; 1409 const struct unicode_map *um = sb->s_encoding; 1410 struct qstr qstr = QSTR_INIT(str, len); 1411 char strbuf[DNAME_INLINE_LEN]; 1412 int ret; 1413 1414 if (!dir || !needs_casefold(dir)) 1415 goto fallback; 1416 /* 1417 * If the dentry name is stored in-line, then it may be concurrently 1418 * modified by a rename. If this happens, the VFS will eventually retry 1419 * the lookup, so it doesn't matter what ->d_compare() returns. 1420 * However, it's unsafe to call utf8_strncasecmp() with an unstable 1421 * string. Therefore, we have to copy the name into a temporary buffer. 1422 */ 1423 if (len <= DNAME_INLINE_LEN - 1) { 1424 memcpy(strbuf, str, len); 1425 strbuf[len] = 0; 1426 qstr.name = strbuf; 1427 /* prevent compiler from optimizing out the temporary buffer */ 1428 barrier(); 1429 } 1430 ret = utf8_strncasecmp(um, name, &qstr); 1431 if (ret >= 0) 1432 return ret; 1433 1434 if (sb_has_strict_encoding(sb)) 1435 return -EINVAL; 1436 fallback: 1437 if (len != name->len) 1438 return 1; 1439 return !!memcmp(str, name->name, len); 1440 } 1441 1442 /** 1443 * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems 1444 * @dentry: dentry of the parent directory 1445 * @str: qstr of name whose hash we should fill in 1446 * 1447 * Return: 0 if hash was successful or unchanged, and -EINVAL on error 1448 */ 1449 static int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str) 1450 { 1451 const struct inode *dir = READ_ONCE(dentry->d_inode); 1452 struct super_block *sb = dentry->d_sb; 1453 const struct unicode_map *um = sb->s_encoding; 1454 int ret = 0; 1455 1456 if (!dir || !needs_casefold(dir)) 1457 return 0; 1458 1459 ret = utf8_casefold_hash(um, dentry, str); 1460 if (ret < 0 && sb_has_strict_encoding(sb)) 1461 return -EINVAL; 1462 return 0; 1463 } 1464 1465 static const struct dentry_operations generic_ci_dentry_ops = { 1466 .d_hash = generic_ci_d_hash, 1467 .d_compare = generic_ci_d_compare, 1468 }; 1469 #endif 1470 1471 #ifdef CONFIG_FS_ENCRYPTION 1472 static const struct dentry_operations generic_encrypted_dentry_ops = { 1473 .d_revalidate = fscrypt_d_revalidate, 1474 }; 1475 #endif 1476 1477 #if defined(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_UNICODE) 1478 static const struct dentry_operations generic_encrypted_ci_dentry_ops = { 1479 .d_hash = generic_ci_d_hash, 1480 .d_compare = generic_ci_d_compare, 1481 .d_revalidate = fscrypt_d_revalidate, 1482 }; 1483 #endif 1484 1485 /** 1486 * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry 1487 * @dentry: dentry to set ops on 1488 * 1489 * Casefolded directories need d_hash and d_compare set, so that the dentries 1490 * contained in them are handled case-insensitively. Note that these operations 1491 * are needed on the parent directory rather than on the dentries in it, and 1492 * while the casefolding flag can be toggled on and off on an empty directory, 1493 * dentry_operations can't be changed later. As a result, if the filesystem has 1494 * casefolding support enabled at all, we have to give all dentries the 1495 * casefolding operations even if their inode doesn't have the casefolding flag 1496 * currently (and thus the casefolding ops would be no-ops for now). 1497 * 1498 * Encryption works differently in that the only dentry operation it needs is 1499 * d_revalidate, which it only needs on dentries that have the no-key name flag. 1500 * The no-key flag can't be set "later", so we don't have to worry about that. 1501 * 1502 * Finally, to maximize compatibility with overlayfs (which isn't compatible 1503 * with certain dentry operations) and to avoid taking an unnecessary 1504 * performance hit, we use custom dentry_operations for each possible 1505 * combination rather than always installing all operations. 1506 */ 1507 void generic_set_encrypted_ci_d_ops(struct dentry *dentry) 1508 { 1509 #ifdef CONFIG_FS_ENCRYPTION 1510 bool needs_encrypt_ops = dentry->d_flags & DCACHE_NOKEY_NAME; 1511 #endif 1512 #if IS_ENABLED(CONFIG_UNICODE) 1513 bool needs_ci_ops = dentry->d_sb->s_encoding; 1514 #endif 1515 #if defined(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_UNICODE) 1516 if (needs_encrypt_ops && needs_ci_ops) { 1517 d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops); 1518 return; 1519 } 1520 #endif 1521 #ifdef CONFIG_FS_ENCRYPTION 1522 if (needs_encrypt_ops) { 1523 d_set_d_op(dentry, &generic_encrypted_dentry_ops); 1524 return; 1525 } 1526 #endif 1527 #if IS_ENABLED(CONFIG_UNICODE) 1528 if (needs_ci_ops) { 1529 d_set_d_op(dentry, &generic_ci_dentry_ops); 1530 return; 1531 } 1532 #endif 1533 } 1534 EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops); 1535 1536 /** 1537 * inode_maybe_inc_iversion - increments i_version 1538 * @inode: inode with the i_version that should be updated 1539 * @force: increment the counter even if it's not necessary? 1540 * 1541 * Every time the inode is modified, the i_version field must be seen to have 1542 * changed by any observer. 1543 * 1544 * If "force" is set or the QUERIED flag is set, then ensure that we increment 1545 * the value, and clear the queried flag. 1546 * 1547 * In the common case where neither is set, then we can return "false" without 1548 * updating i_version. 1549 * 1550 * If this function returns false, and no other metadata has changed, then we 1551 * can avoid logging the metadata. 1552 */ 1553 bool inode_maybe_inc_iversion(struct inode *inode, bool force) 1554 { 1555 u64 cur, new; 1556 1557 /* 1558 * The i_version field is not strictly ordered with any other inode 1559 * information, but the legacy inode_inc_iversion code used a spinlock 1560 * to serialize increments. 1561 * 1562 * Here, we add full memory barriers to ensure that any de-facto 1563 * ordering with other info is preserved. 1564 * 1565 * This barrier pairs with the barrier in inode_query_iversion() 1566 */ 1567 smp_mb(); 1568 cur = inode_peek_iversion_raw(inode); 1569 do { 1570 /* If flag is clear then we needn't do anything */ 1571 if (!force && !(cur & I_VERSION_QUERIED)) 1572 return false; 1573 1574 /* Since lowest bit is flag, add 2 to avoid it */ 1575 new = (cur & ~I_VERSION_QUERIED) + I_VERSION_INCREMENT; 1576 } while (!atomic64_try_cmpxchg(&inode->i_version, &cur, new)); 1577 return true; 1578 } 1579 EXPORT_SYMBOL(inode_maybe_inc_iversion); 1580 1581 /** 1582 * inode_query_iversion - read i_version for later use 1583 * @inode: inode from which i_version should be read 1584 * 1585 * Read the inode i_version counter. This should be used by callers that wish 1586 * to store the returned i_version for later comparison. This will guarantee 1587 * that a later query of the i_version will result in a different value if 1588 * anything has changed. 1589 * 1590 * In this implementation, we fetch the current value, set the QUERIED flag and 1591 * then try to swap it into place with a cmpxchg, if it wasn't already set. If 1592 * that fails, we try again with the newly fetched value from the cmpxchg. 1593 */ 1594 u64 inode_query_iversion(struct inode *inode) 1595 { 1596 u64 cur, new; 1597 1598 cur = inode_peek_iversion_raw(inode); 1599 do { 1600 /* If flag is already set, then no need to swap */ 1601 if (cur & I_VERSION_QUERIED) { 1602 /* 1603 * This barrier (and the implicit barrier in the 1604 * cmpxchg below) pairs with the barrier in 1605 * inode_maybe_inc_iversion(). 1606 */ 1607 smp_mb(); 1608 break; 1609 } 1610 1611 new = cur | I_VERSION_QUERIED; 1612 } while (!atomic64_try_cmpxchg(&inode->i_version, &cur, new)); 1613 return cur >> I_VERSION_QUERIED_SHIFT; 1614 } 1615 EXPORT_SYMBOL(inode_query_iversion); 1616