Lines Matching +full:pre +full:- +full:verified

36  * cramfs super-block data in memory
51 return sb->s_fs_info; in CRAMFS_SB()
64 #define OFFSET(x) ((x)->i_ino)
68 if (!cino->offset) in cramino()
70 if (!cino->size) in cramino()
75 * cramfs_inode->offset is set to a non zero value for entries in cramino()
78 switch (cino->mode & S_IFMT) { in cramino()
82 return cino->offset << 2; in cramino()
97 return ERR_PTR(-ENOMEM); in get_cramfs_inode()
98 if (!(inode->i_state & I_NEW)) in get_cramfs_inode()
101 switch (cramfs_inode->mode & S_IFMT) { in get_cramfs_inode()
103 inode->i_fop = &generic_ro_fops; in get_cramfs_inode()
104 inode->i_data.a_ops = &cramfs_aops; in get_cramfs_inode()
106 CRAMFS_SB(sb)->flags & CRAMFS_FLAG_EXT_BLOCK_POINTERS && in get_cramfs_inode()
107 CRAMFS_SB(sb)->linear_phys_addr) in get_cramfs_inode()
108 inode->i_fop = &cramfs_physmem_fops; in get_cramfs_inode()
111 inode->i_op = &cramfs_dir_inode_operations; in get_cramfs_inode()
112 inode->i_fop = &cramfs_directory_operations; in get_cramfs_inode()
115 inode->i_op = &page_symlink_inode_operations; in get_cramfs_inode()
117 inode->i_data.a_ops = &cramfs_aops; in get_cramfs_inode()
123 init_special_inode(inode, cramfs_inode->mode, in get_cramfs_inode()
124 old_decode_dev(cramfs_inode->size)); in get_cramfs_inode()
128 inode->i_mode, inode->i_ino); in get_cramfs_inode()
130 return ERR_PTR(-EIO); in get_cramfs_inode()
133 inode->i_mode = cramfs_inode->mode; in get_cramfs_inode()
134 i_uid_write(inode, cramfs_inode->uid); in get_cramfs_inode()
135 i_gid_write(inode, cramfs_inode->gid); in get_cramfs_inode()
138 if (!(inode->i_ino & 3)) { in get_cramfs_inode()
139 inode->i_size = cramfs_inode->size; in get_cramfs_inode()
140 inode->i_blocks = (cramfs_inode->size - 1) / 512 + 1; in get_cramfs_inode()
146 /* inode->i_nlink is left 1 - arguably wrong for directories, in get_cramfs_inode()
149 without -noleaf option. */ in get_cramfs_inode()
158 * with the rom-image, because the way the filesystem is set
164 * worry about end-of-buffer issues even when decompressing a full
171 /* NEXT_BUFFER(): Loop over [0..(READ_BUFFERS-1)]. */
194 struct address_space *mapping = sb->s_bdev->bd_mapping; in cramfs_blkdev_read()
204 offset &= PAGE_SIZE - 1; in cramfs_blkdev_read()
214 blk_offset = (blocknr - buffer_blocknr[i]) << PAGE_SHIFT; in cramfs_blkdev_read()
222 devsize = bdev_nr_bytes(sb->s_bdev) >> PAGE_SHIFT; in cramfs_blkdev_read()
269 if (len > sbi->size || offset > sbi->size - len) in cramfs_direct_read()
271 return sbi->linear_virt_addr + offset; in cramfs_direct_read()
283 if (IS_ENABLED(CONFIG_CRAMFS_MTD) && sbi->linear_virt_addr) in cramfs_read()
298 struct cramfs_sb_info *sbi = CRAMFS_SB(inode->i_sb); in cramfs_get_block_range()
307 blockptrs = (u32 *)(sbi->linear_virt_addr + OFFSET(inode) + pgoff * 4); in cramfs_get_block_range()
317 pgoff+i, pgoff + *pages - 1, in cramfs_get_block_range()
335 * (verified by cramfs_get_block_range() and directly accessible in memory.
339 struct cramfs_sb_info *sbi = CRAMFS_SB(inode->i_sb); in cramfs_last_page_is_shared()
343 partial = offset_in_page(inode->i_size); in cramfs_last_page_is_shared()
346 last_page = inode->i_size >> PAGE_SHIFT; in cramfs_last_page_is_shared()
347 blockptrs = (u32 *)(sbi->linear_virt_addr + OFFSET(inode)); in cramfs_last_page_is_shared()
350 tail_data = sbi->linear_virt_addr + blockaddr + partial; in cramfs_last_page_is_shared()
351 return memchr_inv(tail_data, 0, PAGE_SIZE - partial) ? true : false; in cramfs_last_page_is_shared()
357 struct cramfs_sb_info *sbi = CRAMFS_SB(inode->i_sb); in cramfs_physmem_mmap()
359 unsigned long address, pgoff = vma->vm_pgoff; in cramfs_physmem_mmap()
368 * Now try to pre-populate ptes for this vma with a direct in cramfs_physmem_mmap()
374 if (vma->vm_flags & VM_WRITE) in cramfs_physmem_mmap()
377 max_pages = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_physmem_mmap()
381 pages = min(vma_pages(vma), max_pages - pgoff); in cramfs_physmem_mmap()
387 address = sbi->linear_phys_addr + offset; in cramfs_physmem_mmap()
395 pages--; in cramfs_physmem_mmap()
406 * make it distinguishable from a non-direct mapping in cramfs_physmem_mmap()
410 ret = remap_pfn_range(vma, vma->vm_start, address >> PAGE_SHIFT, in cramfs_physmem_mmap()
411 pages * PAGE_SIZE, vma->vm_page_prot); in cramfs_physmem_mmap()
423 vmf = vmf_insert_mixed(vma, vma->vm_start + off, in cramfs_physmem_mmap()
433 pgoff, address, pages, vma_pages(vma), vma->vm_start, in cramfs_physmem_mmap()
434 (unsigned long long)pgprot_val(vma->vm_page_prot)); in cramfs_physmem_mmap()
448 return is_nommu_shared_mapping(vma->vm_flags) ? 0 : -ENOSYS; in cramfs_physmem_mmap()
456 struct super_block *sb = inode->i_sb; in cramfs_physmem_get_unmapped_area()
460 pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_physmem_get_unmapped_area()
461 max_pages = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_physmem_get_unmapped_area()
462 if (pgoff >= max_pages || pages > max_pages - pgoff) in cramfs_physmem_get_unmapped_area()
463 return -EINVAL; in cramfs_physmem_get_unmapped_area()
467 return -ENOSYS; in cramfs_physmem_get_unmapped_area()
468 addr = sbi->linear_phys_addr + offset; in cramfs_physmem_get_unmapped_area()
499 if (IS_ENABLED(CONFIG_CRAMFS_MTD) && sb->s_mtd) { in cramfs_kill_sb()
500 if (sbi && sbi->mtd_point_size) in cramfs_kill_sb()
501 mtd_unpoint(sb->s_mtd, 0, sbi->mtd_point_size); in cramfs_kill_sb()
502 put_mtd_device(sb->s_mtd); in cramfs_kill_sb()
503 sb->s_mtd = NULL; in cramfs_kill_sb()
504 } else if (IS_ENABLED(CONFIG_CRAMFS_BLOCKDEV) && sb->s_bdev) { in cramfs_kill_sb()
505 sync_blockdev(sb->s_bdev); in cramfs_kill_sb()
506 bdev_fput(sb->s_bdev_file); in cramfs_kill_sb()
513 sync_filesystem(fc->root->d_sb); in cramfs_reconfigure()
514 fc->sb_flags |= SB_RDONLY; in cramfs_reconfigure()
523 bool silent = fc->sb_flags & SB_SILENT; in cramfs_read_super()
526 sbi->size = PAGE_SIZE; in cramfs_read_super()
534 if (super->magic != CRAMFS_MAGIC) { in cramfs_read_super()
536 if (super->magic == CRAMFS_MAGIC_WEND) { in cramfs_read_super()
539 return -EINVAL; in cramfs_read_super()
548 if (super->magic != CRAMFS_MAGIC) { in cramfs_read_super()
549 if (super->magic == CRAMFS_MAGIC_WEND && !silent) in cramfs_read_super()
553 return -EINVAL; in cramfs_read_super()
558 if (super->flags & ~CRAMFS_SUPPORTED_FLAGS) { in cramfs_read_super()
560 return -EINVAL; in cramfs_read_super()
564 if (!S_ISDIR(super->root.mode)) { in cramfs_read_super()
566 return -EINVAL; in cramfs_read_super()
568 /* correct strange, hard-coded permissions of mkcramfs */ in cramfs_read_super()
569 super->root.mode |= 0555; in cramfs_read_super()
571 root_offset = super->root.offset << 2; in cramfs_read_super()
572 if (super->flags & CRAMFS_FLAG_FSID_VERSION_2) { in cramfs_read_super()
573 sbi->size = super->size; in cramfs_read_super()
574 sbi->blocks = super->fsid.blocks; in cramfs_read_super()
575 sbi->files = super->fsid.files; in cramfs_read_super()
577 sbi->size = 1<<28; in cramfs_read_super()
578 sbi->blocks = 0; in cramfs_read_super()
579 sbi->files = 0; in cramfs_read_super()
581 sbi->magic = super->magic; in cramfs_read_super()
582 sbi->flags = super->flags; in cramfs_read_super()
585 else if (!(super->flags & CRAMFS_FLAG_SHIFTED_ROOT_OFFSET) && in cramfs_read_super()
590 return -EINVAL; in cramfs_read_super()
602 sb->s_flags |= SB_RDONLY; in cramfs_finalize_super()
603 sb->s_time_min = 0; in cramfs_finalize_super()
604 sb->s_time_max = 0; in cramfs_finalize_super()
605 sb->s_op = &cramfs_ops; in cramfs_finalize_super()
609 sb->s_root = d_make_root(root); in cramfs_finalize_super()
610 if (!sb->s_root) in cramfs_finalize_super()
611 return -ENOMEM; in cramfs_finalize_super()
623 return -ENOMEM; in cramfs_blkdev_fill_super()
624 sb->s_fs_info = sbi; in cramfs_blkdev_fill_super()
628 buffer_blocknr[i] = -1; in cramfs_blkdev_fill_super()
644 return -ENOMEM; in cramfs_mtd_fill_super()
645 sb->s_fs_info = sbi; in cramfs_mtd_fill_super()
648 err = mtd_point(sb->s_mtd, 0, PAGE_SIZE, &sbi->mtd_point_size, in cramfs_mtd_fill_super()
649 &sbi->linear_virt_addr, &sbi->linear_phys_addr); in cramfs_mtd_fill_super()
650 if (err || sbi->mtd_point_size != PAGE_SIZE) { in cramfs_mtd_fill_super()
652 sb->s_mtd->name); in cramfs_mtd_fill_super()
653 return err ? : -ENODATA; in cramfs_mtd_fill_super()
657 &sbi->linear_phys_addr); in cramfs_mtd_fill_super()
664 sb->s_mtd->name, sbi->size/1024); in cramfs_mtd_fill_super()
665 mtd_unpoint(sb->s_mtd, 0, PAGE_SIZE); in cramfs_mtd_fill_super()
666 err = mtd_point(sb->s_mtd, 0, sbi->size, &sbi->mtd_point_size, in cramfs_mtd_fill_super()
667 &sbi->linear_virt_addr, &sbi->linear_phys_addr); in cramfs_mtd_fill_super()
668 if (err || sbi->mtd_point_size != sbi->size) { in cramfs_mtd_fill_super()
670 sb->s_mtd->name); in cramfs_mtd_fill_super()
671 return err ? : -ENODATA; in cramfs_mtd_fill_super()
679 struct super_block *sb = dentry->d_sb; in cramfs_statfs()
682 if (sb->s_bdev) in cramfs_statfs()
683 id = huge_encode_dev(sb->s_bdev->bd_dev); in cramfs_statfs()
684 else if (sb->s_dev) in cramfs_statfs()
685 id = huge_encode_dev(sb->s_dev); in cramfs_statfs()
687 buf->f_type = CRAMFS_MAGIC; in cramfs_statfs()
688 buf->f_bsize = PAGE_SIZE; in cramfs_statfs()
689 buf->f_blocks = CRAMFS_SB(sb)->blocks; in cramfs_statfs()
690 buf->f_bfree = 0; in cramfs_statfs()
691 buf->f_bavail = 0; in cramfs_statfs()
692 buf->f_files = CRAMFS_SB(sb)->files; in cramfs_statfs()
693 buf->f_ffree = 0; in cramfs_statfs()
694 buf->f_fsid = u64_to_fsid(id); in cramfs_statfs()
695 buf->f_namelen = CRAMFS_MAXPATHLEN; in cramfs_statfs()
705 struct super_block *sb = inode->i_sb; in cramfs_readdir()
710 if (ctx->pos >= inode->i_size) in cramfs_readdir()
712 offset = ctx->pos; in cramfs_readdir()
713 /* Directory entries are always 4-byte aligned */ in cramfs_readdir()
715 return -EINVAL; in cramfs_readdir()
719 return -ENOMEM; in cramfs_readdir()
721 while (offset < inode->i_size) { in cramfs_readdir()
735 * and the name padded out to 4-byte boundaries in cramfs_readdir()
738 namelen = de->namelen << 2; in cramfs_readdir()
741 mode = de->mode; in cramfs_readdir()
747 return -EIO; in cramfs_readdir()
749 if (buf[namelen-1]) in cramfs_readdir()
751 namelen--; in cramfs_readdir()
756 ctx->pos = offset = nextoffset; in cramfs_readdir()
772 sorted = CRAMFS_SB(dir->i_sb)->flags & CRAMFS_FLAG_SORTED_DIRS; in cramfs_lookup()
773 while (offset < dir->i_size) { in cramfs_lookup()
779 de = cramfs_read(dir->i_sb, dir_off, sizeof(*de)+CRAMFS_MAXPATHLEN); in cramfs_lookup()
783 if (sorted && (dentry->d_name.name[0] < name[0])) in cramfs_lookup()
786 namelen = de->namelen << 2; in cramfs_lookup()
790 if (((dentry->d_name.len + 3) & ~3) != namelen) in cramfs_lookup()
795 inode = ERR_PTR(-EIO); in cramfs_lookup()
798 if (name[namelen-1]) in cramfs_lookup()
800 namelen--; in cramfs_lookup()
802 if (namelen != dentry->d_name.len) in cramfs_lookup()
804 retval = memcmp(dentry->d_name.name, name, namelen); in cramfs_lookup()
808 inode = get_cramfs_inode(dir->i_sb, de, dir_off); in cramfs_lookup()
822 struct inode *inode = folio->mapping->host; in cramfs_read_folio()
828 maxblock = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_read_folio()
832 if (folio->index < maxblock) { in cramfs_read_folio()
833 struct super_block *sb = inode->i_sb; in cramfs_read_folio()
834 u32 blkptr_offset = OFFSET(inode) + folio->index * 4; in cramfs_read_folio()
855 if (folio->index == maxblock - 1) in cramfs_read_folio()
857 offset_in_page(inode->i_size); in cramfs_read_folio()
872 if (folio->index) in cramfs_read_folio()
874 cramfs_read(sb, blkptr_offset - 4, 4); in cramfs_read_folio()
890 block_len = block_ptr - block_start; in cramfs_read_folio()
916 memset(pgdata + bytes_filled, 0, PAGE_SIZE - bytes_filled); in cramfs_read_folio()
953 int ret = -ENOPROTOOPT; in cramfs_get_tree()
975 fc->ops = &cramfs_context_ops; in cramfs_init_fs_context()