Lines Matching refs:block

17  * Find a number of contiguous clear bits in a directory block bitmask.
20 * variable. The first bit doesn't count as it corresponds to the block header
23 static int afs_find_contig_bits(union afs_xdr_dir_block *block, unsigned int nr_slots)
29 bitmap = (u64)block->hdr.bitmap[0] << 0 * 8;
30 bitmap |= (u64)block->hdr.bitmap[1] << 1 * 8;
31 bitmap |= (u64)block->hdr.bitmap[2] << 2 * 8;
32 bitmap |= (u64)block->hdr.bitmap[3] << 3 * 8;
33 bitmap |= (u64)block->hdr.bitmap[4] << 4 * 8;
34 bitmap |= (u64)block->hdr.bitmap[5] << 5 * 8;
35 bitmap |= (u64)block->hdr.bitmap[6] << 6 * 8;
36 bitmap |= (u64)block->hdr.bitmap[7] << 7 * 8;
66 * Set a number of contiguous bits in the directory block bitmap.
68 static void afs_set_contig_bits(union afs_xdr_dir_block *block,
76 block->hdr.bitmap[0] |= (u8)(mask >> 0 * 8);
77 block->hdr.bitmap[1] |= (u8)(mask >> 1 * 8);
78 block->hdr.bitmap[2] |= (u8)(mask >> 2 * 8);
79 block->hdr.bitmap[3] |= (u8)(mask >> 3 * 8);
80 block->hdr.bitmap[4] |= (u8)(mask >> 4 * 8);
81 block->hdr.bitmap[5] |= (u8)(mask >> 5 * 8);
82 block->hdr.bitmap[6] |= (u8)(mask >> 6 * 8);
83 block->hdr.bitmap[7] |= (u8)(mask >> 7 * 8);
87 * Clear a number of contiguous bits in the directory block bitmap.
89 static void afs_clear_contig_bits(union afs_xdr_dir_block *block,
97 block->hdr.bitmap[0] &= ~(u8)(mask >> 0 * 8);
98 block->hdr.bitmap[1] &= ~(u8)(mask >> 1 * 8);
99 block->hdr.bitmap[2] &= ~(u8)(mask >> 2 * 8);
100 block->hdr.bitmap[3] &= ~(u8)(mask >> 3 * 8);
101 block->hdr.bitmap[4] &= ~(u8)(mask >> 4 * 8);
102 block->hdr.bitmap[5] &= ~(u8)(mask >> 5 * 8);
103 block->hdr.bitmap[6] &= ~(u8)(mask >> 6 * 8);
104 block->hdr.bitmap[7] &= ~(u8)(mask >> 7 * 8);
128 * Scan a directory block looking for a dirent of the right name.
130 static int afs_dir_scan_block(union afs_xdr_dir_block *block, struct qstr *name,
139 bitmap = (u64)block->hdr.bitmap[0] << 0 * 8;
140 bitmap |= (u64)block->hdr.bitmap[1] << 1 * 8;
141 bitmap |= (u64)block->hdr.bitmap[2] << 2 * 8;
142 bitmap |= (u64)block->hdr.bitmap[3] << 3 * 8;
143 bitmap |= (u64)block->hdr.bitmap[4] << 4 * 8;
144 bitmap |= (u64)block->hdr.bitmap[5] << 5 * 8;
145 bitmap |= (u64)block->hdr.bitmap[6] << 6 * 8;
146 bitmap |= (u64)block->hdr.bitmap[7] << 7 * 8;
153 de = &block->dirents[d];
157 /* The block was NUL-terminated by afs_dir_check_page(). */
172 * Initialise a new directory block. Note that block 0 is special and contains
176 union afs_xdr_dir_block *block, int block_num)
178 memset(block, 0, sizeof(*block));
179 block->hdr.npages = htons(1);
180 block->hdr.magic = AFS_DIR_MAGIC;
181 block->hdr.bitmap[0] = 1;
184 block->hdr.bitmap[0] = 0xff;
185 block->hdr.bitmap[1] = 0x1f;
186 memset(block->meta.alloc_ctrs,
188 sizeof(block->meta.alloc_ctrs));
210 union afs_xdr_dir_block *meta, *block;
241 /* Find a block that has sufficient slots available. Each folio
259 block = kmap_local_folio(folio, b * AFS_DIR_BLOCK_SIZE - folio_file_pos(folio));
265 _debug("block %u: %2u %3u %u",
268 ntohs(block->hdr.npages),
269 ntohs(block->hdr.magic));
271 /* Initialise the block if necessary. */
274 afs_edit_init_block(meta, block, b);
284 slot = afs_find_contig_bits(block, need_slots);
291 kunmap_local(block);
311 block = kmap_local_folio(folio, 0);
319 de = &block->dirents[slot];
329 afs_set_contig_bits(block, slot, need_slots);
330 kunmap_local(block);
354 kunmap_local(block);
377 union afs_xdr_dir_block *meta, *block;
407 /* Find a block that has sufficient slots available. Each folio
420 block = kmap_local_folio(folio, b * AFS_DIR_BLOCK_SIZE - folio_file_pos(folio));
428 slot = afs_dir_scan_block(block, name, b);
433 kunmap_local(block);
447 de = &block->dirents[slot];
456 afs_clear_contig_bits(block, slot, need_slots);
457 kunmap_local(block);
482 kunmap_local(block);