Lines Matching +full:block +full:- +full:offset
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Squashfs - a compressed read only filesystem for Linux
31 * Lookup offset (f_pos) in the directory index, returning the
32 * metadata block containing it.
35 * (if any) we have managed to read - the index isn't essential, just
42 struct squashfs_sb_info *msblk = sb->s_fs_info; in get_dir_index_using_offset()
52 * is offset by 3 because we invent "." and ".." entries which are in get_dir_index_using_offset()
57 f_pos -= 3; in get_dir_index_using_offset()
85 msblk->directory_table; in get_dir_index_using_offset()
100 struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; in squashfs_readdir()
101 u64 block = squashfs_i(inode)->start + msblk->directory_table; in squashfs_readdir() local
102 int offset = squashfs_i(inode)->offset, length, err; in squashfs_readdir() local
107 TRACE("Entered squashfs_readdir [%llx:%x]\n", block, offset); in squashfs_readdir()
120 * It also means that the external f_pos is offset by 3 from the in squashfs_readdir()
121 * on-disk directory f_pos. in squashfs_readdir()
123 while (ctx->pos < 3) { in squashfs_readdir()
127 if (ctx->pos == 0) { in squashfs_readdir()
130 i_ino = inode->i_ino; in squashfs_readdir()
134 i_ino = squashfs_i(inode)->parent; in squashfs_readdir()
141 ctx->pos += size; in squashfs_readdir()
144 length = get_dir_index_using_offset(inode->i_sb, &block, &offset, in squashfs_readdir()
145 squashfs_i(inode)->dir_idx_start, in squashfs_readdir()
146 squashfs_i(inode)->dir_idx_offset, in squashfs_readdir()
147 squashfs_i(inode)->dir_idx_cnt, in squashfs_readdir()
148 ctx->pos); in squashfs_readdir()
154 err = squashfs_read_metadata(inode->i_sb, &dirh, &block, in squashfs_readdir()
155 &offset, sizeof(dirh)); in squashfs_readdir()
166 while (dir_count--) { in squashfs_readdir()
170 err = squashfs_read_metadata(inode->i_sb, dire, &block, in squashfs_readdir()
171 &offset, sizeof(*dire)); in squashfs_readdir()
175 size = le16_to_cpu(dire->size) + 1; in squashfs_readdir()
181 err = squashfs_read_metadata(inode->i_sb, dire->name, in squashfs_readdir()
182 &block, &offset, size); in squashfs_readdir()
188 if (ctx->pos >= length) in squashfs_readdir()
191 dire->name[size] = '\0'; in squashfs_readdir()
193 ((short) le16_to_cpu(dire->inode_number)); in squashfs_readdir()
194 type = le16_to_cpu(dire->type); in squashfs_readdir()
199 if (!dir_emit(ctx, dire->name, size, in squashfs_readdir()
204 ctx->pos = length; in squashfs_readdir()
213 ERROR("Unable to read directory block [%llx:%x]\n", block, offset); in squashfs_readdir()