• Home
  • Raw
  • Download

Lines Matching +full:trace +full:- +full:mapping

2  * Squashfs - a compressed read only filesystem for Linux
19 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
27 * compressed fragment block (tail-end packed block). The compressed size
32 * larger), the code implements an index cache that caches the mapping from
36 * retaining a simple and space-efficient block list on disk. The cache
65 struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; in locate_meta_index()
68 mutex_lock(&msblk->meta_index_mutex); in locate_meta_index()
70 TRACE("locate_meta_index: index %d, offset %d\n", index, offset); in locate_meta_index()
72 if (msblk->meta_index == NULL) in locate_meta_index()
76 if (msblk->meta_index[i].inode_number == inode->i_ino && in locate_meta_index()
77 msblk->meta_index[i].offset >= offset && in locate_meta_index()
78 msblk->meta_index[i].offset <= index && in locate_meta_index()
79 msblk->meta_index[i].locked == 0) { in locate_meta_index()
80 TRACE("locate_meta_index: entry %d, offset %d\n", i, in locate_meta_index()
81 msblk->meta_index[i].offset); in locate_meta_index()
82 meta = &msblk->meta_index[i]; in locate_meta_index()
83 offset = meta->offset; in locate_meta_index()
88 meta->locked = 1; in locate_meta_index()
91 mutex_unlock(&msblk->meta_index_mutex); in locate_meta_index()
103 struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; in empty_meta_index()
107 mutex_lock(&msblk->meta_index_mutex); in empty_meta_index()
109 TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); in empty_meta_index()
111 if (msblk->meta_index == NULL) { in empty_meta_index()
118 msblk->meta_index = kcalloc(SQUASHFS_META_SLOTS, in empty_meta_index()
119 sizeof(*(msblk->meta_index)), GFP_KERNEL); in empty_meta_index()
120 if (msblk->meta_index == NULL) { in empty_meta_index()
125 msblk->meta_index[i].inode_number = 0; in empty_meta_index()
126 msblk->meta_index[i].locked = 0; in empty_meta_index()
128 msblk->next_meta_index = 0; in empty_meta_index()
132 msblk->meta_index[msblk->next_meta_index].locked; i--) in empty_meta_index()
133 msblk->next_meta_index = (msblk->next_meta_index + 1) % in empty_meta_index()
137 TRACE("empty_meta_index: failed!\n"); in empty_meta_index()
141 TRACE("empty_meta_index: returned meta entry %d, %p\n", in empty_meta_index()
142 msblk->next_meta_index, in empty_meta_index()
143 &msblk->meta_index[msblk->next_meta_index]); in empty_meta_index()
145 meta = &msblk->meta_index[msblk->next_meta_index]; in empty_meta_index()
146 msblk->next_meta_index = (msblk->next_meta_index + 1) % in empty_meta_index()
149 meta->inode_number = inode->i_ino; in empty_meta_index()
150 meta->offset = offset; in empty_meta_index()
151 meta->skip = skip; in empty_meta_index()
152 meta->entries = 0; in empty_meta_index()
153 meta->locked = 1; in empty_meta_index()
156 mutex_unlock(&msblk->meta_index_mutex); in empty_meta_index()
163 struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; in release_meta_index()
164 mutex_lock(&msblk->meta_index_mutex); in release_meta_index()
165 meta->locked = 0; in release_meta_index()
166 mutex_unlock(&msblk->meta_index_mutex); in release_meta_index()
183 return -ENOMEM; in read_indexes()
201 n -= blocks; in read_indexes()
215 * can cache one index -> datablock/blocklist-block mapping. We wish
228 return min(SQUASHFS_CACHED_BLKS - 1, skip + 1); in calculate_skip()
234 * on-disk locations of the datablock and block list metadata block
240 struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; in fill_meta_index()
241 int skip = calculate_skip(i_size_read(inode) >> msblk->block_log); in fill_meta_index()
245 u64 cur_index_block = squashfs_i(inode)->block_list_start; in fill_meta_index()
246 int cur_offset = squashfs_i(inode)->offset; in fill_meta_index()
247 u64 cur_data_block = squashfs_i(inode)->start; in fill_meta_index()
263 offset = index < meta->offset + meta->entries ? index : in fill_meta_index()
264 meta->offset + meta->entries - 1; in fill_meta_index()
265 meta_entry = &meta->meta_entry[offset - meta->offset]; in fill_meta_index()
266 cur_index_block = meta_entry->index_block + in fill_meta_index()
267 msblk->inode_table; in fill_meta_index()
268 cur_offset = meta_entry->offset; in fill_meta_index()
269 cur_data_block = meta_entry->data_block; in fill_meta_index()
270 TRACE("get_meta_index: offset %d, meta->offset %d, " in fill_meta_index()
271 "meta->entries %d\n", offset, meta->offset, in fill_meta_index()
272 meta->entries); in fill_meta_index()
273 TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" in fill_meta_index()
283 for (i = meta->offset + meta->entries; i <= index && in fill_meta_index()
284 i < meta->offset + SQUASHFS_META_ENTRIES; i++) { in fill_meta_index()
286 long long res = read_indexes(inode->i_sb, blocks, in fill_meta_index()
290 if (meta->entries == 0) in fill_meta_index()
295 meta->inode_number = 0; in fill_meta_index()
301 meta_entry = &meta->meta_entry[i - meta->offset]; in fill_meta_index()
302 meta_entry->index_block = cur_index_block - in fill_meta_index()
303 msblk->inode_table; in fill_meta_index()
304 meta_entry->offset = cur_offset; in fill_meta_index()
305 meta_entry->data_block = cur_data_block; in fill_meta_index()
306 meta->entries++; in fill_meta_index()
310 TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", in fill_meta_index()
311 meta->offset, meta->entries); in fill_meta_index()
333 * Get the on-disk location and compressed size of the datablock
344 TRACE("read_blocklist: res %d, index %d, start 0x%llx, offset" in read_blocklist()
352 * res contains the index of the mapping returned by fill_meta_index(), in read_blocklist()
358 blks = read_indexes(inode->i_sb, index - res, &start, &offset); in read_blocklist()
367 res = squashfs_read_metadata(inode->i_sb, &size, &start, &offset, in read_blocklist()
377 struct inode *inode = page->mapping->host; in squashfs_readpage()
378 struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; in squashfs_readpage()
383 int mask = (1 << (msblk->block_log - PAGE_CACHE_SHIFT)) - 1; in squashfs_readpage()
384 int index = page->index >> (msblk->block_log - PAGE_CACHE_SHIFT); in squashfs_readpage()
385 int start_index = page->index & ~mask; in squashfs_readpage()
387 int file_end = i_size_read(inode) >> msblk->block_log; in squashfs_readpage()
389 TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", in squashfs_readpage()
390 page->index, squashfs_i(inode)->start); in squashfs_readpage()
392 if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> in squashfs_readpage()
396 if (index < file_end || squashfs_i(inode)->fragment_block == in squashfs_readpage()
409 (i_size_read(inode) & (msblk->block_size - 1)) : in squashfs_readpage()
410 msblk->block_size; in squashfs_readpage()
416 buffer = squashfs_get_datablock(inode->i_sb, in squashfs_readpage()
418 if (buffer->error) { in squashfs_readpage()
424 bytes = buffer->length; in squashfs_readpage()
428 * Datablock is stored inside a fragment (tail-end packed in squashfs_readpage()
431 buffer = squashfs_get_fragment(inode->i_sb, in squashfs_readpage()
432 squashfs_i(inode)->fragment_block, in squashfs_readpage()
433 squashfs_i(inode)->fragment_size); in squashfs_readpage()
435 if (buffer->error) { in squashfs_readpage()
437 squashfs_i(inode)->fragment_block, in squashfs_readpage()
438 squashfs_i(inode)->fragment_size); in squashfs_readpage()
442 bytes = i_size_read(inode) & (msblk->block_size - 1); in squashfs_readpage()
443 offset = squashfs_i(inode)->fragment_offset; in squashfs_readpage()
453 bytes -= PAGE_CACHE_SIZE, offset += PAGE_CACHE_SIZE) { in squashfs_readpage()
457 TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail); in squashfs_readpage()
459 push_page = (i == page->index) ? page : in squashfs_readpage()
460 grab_cache_page_nowait(page->mapping, i); in squashfs_readpage()
470 memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); in squashfs_readpage()
476 if (i != page->index) in squashfs_readpage()