• Home
  • Raw
  • Download

Lines Matching +full:super +full:- +full:set

26 #include <linux/mtd/super.h>
37 * cramfs super-block data in memory
52 return sb->s_fs_info; in CRAMFS_SB()
65 #define OFFSET(x) ((x)->i_ino)
69 if (!cino->offset) in cramino()
71 if (!cino->size) in cramino()
76 * cramfs_inode->offset is set to a non zero value for entries in cramino()
79 switch (cino->mode & S_IFMT) { in cramino()
83 return cino->offset << 2; in cramino()
98 return ERR_PTR(-ENOMEM); in get_cramfs_inode()
99 if (!(inode->i_state & I_NEW)) in get_cramfs_inode()
102 switch (cramfs_inode->mode & S_IFMT) { in get_cramfs_inode()
104 inode->i_fop = &generic_ro_fops; in get_cramfs_inode()
105 inode->i_data.a_ops = &cramfs_aops; in get_cramfs_inode()
107 CRAMFS_SB(sb)->flags & CRAMFS_FLAG_EXT_BLOCK_POINTERS && in get_cramfs_inode()
108 CRAMFS_SB(sb)->linear_phys_addr) in get_cramfs_inode()
109 inode->i_fop = &cramfs_physmem_fops; in get_cramfs_inode()
112 inode->i_op = &cramfs_dir_inode_operations; in get_cramfs_inode()
113 inode->i_fop = &cramfs_directory_operations; in get_cramfs_inode()
116 inode->i_op = &page_symlink_inode_operations; in get_cramfs_inode()
118 inode->i_data.a_ops = &cramfs_aops; in get_cramfs_inode()
121 init_special_inode(inode, cramfs_inode->mode, in get_cramfs_inode()
122 old_decode_dev(cramfs_inode->size)); in get_cramfs_inode()
125 inode->i_mode = cramfs_inode->mode; in get_cramfs_inode()
126 i_uid_write(inode, cramfs_inode->uid); in get_cramfs_inode()
127 i_gid_write(inode, cramfs_inode->gid); in get_cramfs_inode()
130 if (!(inode->i_ino & 3)) { in get_cramfs_inode()
131 inode->i_size = cramfs_inode->size; in get_cramfs_inode()
132 inode->i_blocks = (cramfs_inode->size - 1) / 512 + 1; in get_cramfs_inode()
136 inode->i_mtime = inode->i_atime = inode->i_ctime = zerotime; in get_cramfs_inode()
137 /* inode->i_nlink is left 1 - arguably wrong for directories, in get_cramfs_inode()
140 without -noleaf option. */ in get_cramfs_inode()
149 * with the rom-image, because the way the filesystem is set
155 * worry about end-of-buffer issues even when decompressing a full
162 /* NEXT_BUFFER(): Loop over [0..(READ_BUFFERS-1)]. */
185 struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping; in cramfs_blkdev_read()
194 offset &= PAGE_SIZE - 1; in cramfs_blkdev_read()
204 blk_offset = (blocknr - buffer_blocknr[i]) << PAGE_SHIFT; in cramfs_blkdev_read()
212 devsize = mapping->host->i_size >> PAGE_SHIFT; in cramfs_blkdev_read()
270 if (len > sbi->size || offset > sbi->size - len) in cramfs_direct_read()
272 return sbi->linear_virt_addr + offset; in cramfs_direct_read()
284 if (IS_ENABLED(CONFIG_CRAMFS_MTD) && sbi->linear_virt_addr) in cramfs_read()
299 struct cramfs_sb_info *sbi = CRAMFS_SB(inode->i_sb); in cramfs_get_block_range()
308 blockptrs = (u32 *)(sbi->linear_virt_addr + OFFSET(inode) + pgoff * 4); in cramfs_get_block_range()
318 pgoff+i, pgoff + *pages - 1, in cramfs_get_block_range()
340 struct cramfs_sb_info *sbi = CRAMFS_SB(inode->i_sb); in cramfs_last_page_is_shared()
344 partial = offset_in_page(inode->i_size); in cramfs_last_page_is_shared()
347 last_page = inode->i_size >> PAGE_SHIFT; in cramfs_last_page_is_shared()
348 blockptrs = (u32 *)(sbi->linear_virt_addr + OFFSET(inode)); in cramfs_last_page_is_shared()
351 tail_data = sbi->linear_virt_addr + blockaddr + partial; in cramfs_last_page_is_shared()
352 return memchr_inv(tail_data, 0, PAGE_SIZE - partial) ? true : false; in cramfs_last_page_is_shared()
358 struct cramfs_sb_info *sbi = CRAMFS_SB(inode->i_sb); in cramfs_physmem_mmap()
360 unsigned long address, pgoff = vma->vm_pgoff; in cramfs_physmem_mmap()
369 * Now try to pre-populate ptes for this vma with a direct in cramfs_physmem_mmap()
375 if (vma->vm_flags & VM_WRITE) in cramfs_physmem_mmap()
378 max_pages = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_physmem_mmap()
382 pages = min(vma_pages(vma), max_pages - pgoff); in cramfs_physmem_mmap()
388 address = sbi->linear_phys_addr + offset; in cramfs_physmem_mmap()
396 file_dentry(file)->d_name.name); in cramfs_physmem_mmap()
397 pages--; in cramfs_physmem_mmap()
408 * make it distinguishable from a non-direct mapping in cramfs_physmem_mmap()
412 ret = remap_pfn_range(vma, vma->vm_start, address >> PAGE_SHIFT, in cramfs_physmem_mmap()
413 pages * PAGE_SIZE, vma->vm_page_prot); in cramfs_physmem_mmap()
421 vma->vm_flags |= VM_MIXEDMAP; in cramfs_physmem_mmap()
426 vmf = vmf_insert_mixed(vma, vma->vm_start + off, pfn); in cramfs_physmem_mmap()
435 file_dentry(file)->d_name.name, pgoff, in cramfs_physmem_mmap()
436 address, pages, vma_pages(vma), vma->vm_start, in cramfs_physmem_mmap()
437 (unsigned long long)pgprot_val(vma->vm_page_prot)); in cramfs_physmem_mmap()
442 file_dentry(file)->d_name.name, pgoff, bailout_reason); in cramfs_physmem_mmap()
451 return vma->vm_flags & (VM_SHARED | VM_MAYSHARE) ? 0 : -ENOSYS; in cramfs_physmem_mmap()
459 struct super_block *sb = inode->i_sb; in cramfs_physmem_get_unmapped_area()
463 pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_physmem_get_unmapped_area()
464 max_pages = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_physmem_get_unmapped_area()
465 if (pgoff >= max_pages || pages > max_pages - pgoff) in cramfs_physmem_get_unmapped_area()
466 return -EINVAL; in cramfs_physmem_get_unmapped_area()
470 return -ENOSYS; in cramfs_physmem_get_unmapped_area()
471 addr = sbi->linear_phys_addr + offset; in cramfs_physmem_get_unmapped_area()
473 file_dentry(file)->d_name.name, pgoff*PAGE_SIZE, len, addr); in cramfs_physmem_get_unmapped_area()
500 if (IS_ENABLED(CONFIG_CRAMFS_MTD) && sb->s_mtd) { in cramfs_kill_sb()
501 if (sbi && sbi->mtd_point_size) in cramfs_kill_sb()
502 mtd_unpoint(sb->s_mtd, 0, sbi->mtd_point_size); in cramfs_kill_sb()
504 } else if (IS_ENABLED(CONFIG_CRAMFS_BLOCKDEV) && sb->s_bdev) { in cramfs_kill_sb()
512 sync_filesystem(fc->root->d_sb); in cramfs_reconfigure()
513 fc->sb_flags |= SB_RDONLY; in cramfs_reconfigure()
518 struct cramfs_super *super) in cramfs_read_super() argument
522 bool silent = fc->sb_flags & SB_SILENT; in cramfs_read_super()
525 sbi->size = PAGE_SIZE; in cramfs_read_super()
529 memcpy(super, cramfs_read(sb, 0, sizeof(*super)), sizeof(*super)); in cramfs_read_super()
533 if (super->magic != CRAMFS_MAGIC) { in cramfs_read_super()
535 if (super->magic == CRAMFS_MAGIC_WEND) { in cramfs_read_super()
538 return -EINVAL; in cramfs_read_super()
543 memcpy(super, in cramfs_read_super()
544 cramfs_read(sb, 512, sizeof(*super)), in cramfs_read_super()
545 sizeof(*super)); in cramfs_read_super()
547 if (super->magic != CRAMFS_MAGIC) { in cramfs_read_super()
548 if (super->magic == CRAMFS_MAGIC_WEND && !silent) in cramfs_read_super()
552 return -EINVAL; in cramfs_read_super()
557 if (super->flags & ~CRAMFS_SUPPORTED_FLAGS) { in cramfs_read_super()
559 return -EINVAL; in cramfs_read_super()
563 if (!S_ISDIR(super->root.mode)) { in cramfs_read_super()
565 return -EINVAL; in cramfs_read_super()
567 /* correct strange, hard-coded permissions of mkcramfs */ in cramfs_read_super()
568 super->root.mode |= 0555; in cramfs_read_super()
570 root_offset = super->root.offset << 2; in cramfs_read_super()
571 if (super->flags & CRAMFS_FLAG_FSID_VERSION_2) { in cramfs_read_super()
572 sbi->size = super->size; in cramfs_read_super()
573 sbi->blocks = super->fsid.blocks; in cramfs_read_super()
574 sbi->files = super->fsid.files; in cramfs_read_super()
576 sbi->size = 1<<28; in cramfs_read_super()
577 sbi->blocks = 0; in cramfs_read_super()
578 sbi->files = 0; in cramfs_read_super()
580 sbi->magic = super->magic; in cramfs_read_super()
581 sbi->flags = super->flags; in cramfs_read_super()
584 else if (!(super->flags & CRAMFS_FLAG_SHIFTED_ROOT_OFFSET) && in cramfs_read_super()
589 return -EINVAL; in cramfs_read_super()
600 /* Set it all up.. */ in cramfs_finalize_super()
601 sb->s_flags |= SB_RDONLY; in cramfs_finalize_super()
602 sb->s_time_min = 0; in cramfs_finalize_super()
603 sb->s_time_max = 0; in cramfs_finalize_super()
604 sb->s_op = &cramfs_ops; in cramfs_finalize_super()
608 sb->s_root = d_make_root(root); in cramfs_finalize_super()
609 if (!sb->s_root) in cramfs_finalize_super()
610 return -ENOMEM; in cramfs_finalize_super()
617 struct cramfs_super super; in cramfs_blkdev_fill_super() local
622 return -ENOMEM; in cramfs_blkdev_fill_super()
623 sb->s_fs_info = sbi; in cramfs_blkdev_fill_super()
627 buffer_blocknr[i] = -1; in cramfs_blkdev_fill_super()
629 err = cramfs_read_super(sb, fc, &super); in cramfs_blkdev_fill_super()
632 return cramfs_finalize_super(sb, &super.root); in cramfs_blkdev_fill_super()
638 struct cramfs_super super; in cramfs_mtd_fill_super() local
643 return -ENOMEM; in cramfs_mtd_fill_super()
644 sb->s_fs_info = sbi; in cramfs_mtd_fill_super()
647 err = mtd_point(sb->s_mtd, 0, PAGE_SIZE, &sbi->mtd_point_size, in cramfs_mtd_fill_super()
648 &sbi->linear_virt_addr, &sbi->linear_phys_addr); in cramfs_mtd_fill_super()
649 if (err || sbi->mtd_point_size != PAGE_SIZE) { in cramfs_mtd_fill_super()
651 sb->s_mtd->name); in cramfs_mtd_fill_super()
652 return err ? : -ENODATA; in cramfs_mtd_fill_super()
656 &sbi->linear_phys_addr); in cramfs_mtd_fill_super()
657 err = cramfs_read_super(sb, fc, &super); in cramfs_mtd_fill_super()
663 sb->s_mtd->name, sbi->size/1024); in cramfs_mtd_fill_super()
664 mtd_unpoint(sb->s_mtd, 0, PAGE_SIZE); in cramfs_mtd_fill_super()
665 err = mtd_point(sb->s_mtd, 0, sbi->size, &sbi->mtd_point_size, in cramfs_mtd_fill_super()
666 &sbi->linear_virt_addr, &sbi->linear_phys_addr); in cramfs_mtd_fill_super()
667 if (err || sbi->mtd_point_size != sbi->size) { in cramfs_mtd_fill_super()
669 sb->s_mtd->name); in cramfs_mtd_fill_super()
670 return err ? : -ENODATA; in cramfs_mtd_fill_super()
673 return cramfs_finalize_super(sb, &super.root); in cramfs_mtd_fill_super()
678 struct super_block *sb = dentry->d_sb; in cramfs_statfs()
681 if (sb->s_bdev) in cramfs_statfs()
682 id = huge_encode_dev(sb->s_bdev->bd_dev); in cramfs_statfs()
683 else if (sb->s_dev) in cramfs_statfs()
684 id = huge_encode_dev(sb->s_dev); in cramfs_statfs()
686 buf->f_type = CRAMFS_MAGIC; in cramfs_statfs()
687 buf->f_bsize = PAGE_SIZE; in cramfs_statfs()
688 buf->f_blocks = CRAMFS_SB(sb)->blocks; in cramfs_statfs()
689 buf->f_bfree = 0; in cramfs_statfs()
690 buf->f_bavail = 0; in cramfs_statfs()
691 buf->f_files = CRAMFS_SB(sb)->files; in cramfs_statfs()
692 buf->f_ffree = 0; in cramfs_statfs()
693 buf->f_fsid = u64_to_fsid(id); in cramfs_statfs()
694 buf->f_namelen = CRAMFS_MAXPATHLEN; in cramfs_statfs()
704 struct super_block *sb = inode->i_sb; in cramfs_readdir()
709 if (ctx->pos >= inode->i_size) in cramfs_readdir()
711 offset = ctx->pos; in cramfs_readdir()
712 /* Directory entries are always 4-byte aligned */ in cramfs_readdir()
714 return -EINVAL; in cramfs_readdir()
718 return -ENOMEM; in cramfs_readdir()
720 while (offset < inode->i_size) { in cramfs_readdir()
734 * and the name padded out to 4-byte boundaries in cramfs_readdir()
737 namelen = de->namelen << 2; in cramfs_readdir()
740 mode = de->mode; in cramfs_readdir()
746 return -EIO; in cramfs_readdir()
748 if (buf[namelen-1]) in cramfs_readdir()
750 namelen--; in cramfs_readdir()
755 ctx->pos = offset = nextoffset; in cramfs_readdir()
771 sorted = CRAMFS_SB(dir->i_sb)->flags & CRAMFS_FLAG_SORTED_DIRS; in cramfs_lookup()
772 while (offset < dir->i_size) { in cramfs_lookup()
778 de = cramfs_read(dir->i_sb, dir_off, sizeof(*de)+CRAMFS_MAXPATHLEN); in cramfs_lookup()
782 if (sorted && (dentry->d_name.name[0] < name[0])) in cramfs_lookup()
785 namelen = de->namelen << 2; in cramfs_lookup()
789 if (((dentry->d_name.len + 3) & ~3) != namelen) in cramfs_lookup()
794 inode = ERR_PTR(-EIO); in cramfs_lookup()
797 if (name[namelen-1]) in cramfs_lookup()
799 namelen--; in cramfs_lookup()
801 if (namelen != dentry->d_name.len) in cramfs_lookup()
803 retval = memcmp(dentry->d_name.name, name, namelen); in cramfs_lookup()
807 inode = get_cramfs_inode(dir->i_sb, de, dir_off); in cramfs_lookup()
821 struct inode *inode = page->mapping->host; in cramfs_readpage()
826 maxblock = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; in cramfs_readpage()
830 if (page->index < maxblock) { in cramfs_readpage()
831 struct super_block *sb = inode->i_sb; in cramfs_readpage()
832 u32 blkptr_offset = OFFSET(inode) + page->index * 4; in cramfs_readpage()
853 if (page->index == maxblock - 1) in cramfs_readpage()
855 offset_in_page(inode->i_size); in cramfs_readpage()
870 if (page->index) in cramfs_readpage()
872 cramfs_read(sb, blkptr_offset - 4, 4); in cramfs_readpage()
888 block_len = block_ptr - block_start; in cramfs_readpage()
914 memset(pgdata + bytes_filled, 0, PAGE_SIZE - bytes_filled); in cramfs_readpage()
956 int ret = -ENOPROTOOPT; in cramfs_get_tree()
974 * Set up the filesystem mount context.
978 fc->ops = &cramfs_context_ops; in cramfs_init_fs_context()