Lines Matching refs:si
62 static int __ocfs2_node_num_to_slot(struct ocfs2_slot_info *si,
65 static void ocfs2_invalidate_slot(struct ocfs2_slot_info *si, in ocfs2_invalidate_slot() argument
68 BUG_ON((slot_num < 0) || (slot_num >= si->si_num_slots)); in ocfs2_invalidate_slot()
69 si->si_slots[slot_num].sl_valid = 0; in ocfs2_invalidate_slot()
72 static void ocfs2_set_slot(struct ocfs2_slot_info *si, in ocfs2_set_slot() argument
75 BUG_ON((slot_num < 0) || (slot_num >= si->si_num_slots)); in ocfs2_set_slot()
77 si->si_slots[slot_num].sl_valid = 1; in ocfs2_set_slot()
78 si->si_slots[slot_num].sl_node_num = node_num; in ocfs2_set_slot()
82 static void ocfs2_update_slot_info_extended(struct ocfs2_slot_info *si) in ocfs2_update_slot_info_extended() argument
88 for (b = 0; b < si->si_blocks; b++) { in ocfs2_update_slot_info_extended()
89 se = (struct ocfs2_slot_map_extended *)si->si_bh[b]->b_data; in ocfs2_update_slot_info_extended()
91 (i < si->si_slots_per_block) && in ocfs2_update_slot_info_extended()
92 (slotno < si->si_num_slots); in ocfs2_update_slot_info_extended()
95 ocfs2_set_slot(si, slotno, in ocfs2_update_slot_info_extended()
98 ocfs2_invalidate_slot(si, slotno); in ocfs2_update_slot_info_extended()
107 static void ocfs2_update_slot_info_old(struct ocfs2_slot_info *si) in ocfs2_update_slot_info_old() argument
112 sm = (struct ocfs2_slot_map *)si->si_bh[0]->b_data; in ocfs2_update_slot_info_old()
114 for (i = 0; i < si->si_num_slots; i++) { in ocfs2_update_slot_info_old()
116 ocfs2_invalidate_slot(si, i); in ocfs2_update_slot_info_old()
118 ocfs2_set_slot(si, i, le16_to_cpu(sm->sm_slots[i])); in ocfs2_update_slot_info_old()
122 static void ocfs2_update_slot_info(struct ocfs2_slot_info *si) in ocfs2_update_slot_info() argument
128 if (si->si_extended) in ocfs2_update_slot_info()
129 ocfs2_update_slot_info_extended(si); in ocfs2_update_slot_info()
131 ocfs2_update_slot_info_old(si); in ocfs2_update_slot_info()
137 struct ocfs2_slot_info *si = osb->slot_info; in ocfs2_refresh_slot_info() local
139 if (si == NULL) in ocfs2_refresh_slot_info()
142 BUG_ON(si->si_blocks == 0); in ocfs2_refresh_slot_info()
143 BUG_ON(si->si_bh == NULL); in ocfs2_refresh_slot_info()
145 trace_ocfs2_refresh_slot_info(si->si_blocks); in ocfs2_refresh_slot_info()
152 ret = ocfs2_read_blocks(INODE_CACHE(si->si_inode), -1, si->si_blocks, in ocfs2_refresh_slot_info()
153 si->si_bh, OCFS2_BH_IGNORE_CACHE, NULL); in ocfs2_refresh_slot_info()
156 ocfs2_update_slot_info(si); in ocfs2_refresh_slot_info()
165 static void ocfs2_update_disk_slot_extended(struct ocfs2_slot_info *si, in ocfs2_update_disk_slot_extended() argument
169 int blkind = slot_num / si->si_slots_per_block; in ocfs2_update_disk_slot_extended()
170 int slotno = slot_num % si->si_slots_per_block; in ocfs2_update_disk_slot_extended()
173 BUG_ON(blkind >= si->si_blocks); in ocfs2_update_disk_slot_extended()
175 se = (struct ocfs2_slot_map_extended *)si->si_bh[blkind]->b_data; in ocfs2_update_disk_slot_extended()
176 se->se_slots[slotno].es_valid = si->si_slots[slot_num].sl_valid; in ocfs2_update_disk_slot_extended()
177 if (si->si_slots[slot_num].sl_valid) in ocfs2_update_disk_slot_extended()
179 cpu_to_le32(si->si_slots[slot_num].sl_node_num); in ocfs2_update_disk_slot_extended()
180 *bh = si->si_bh[blkind]; in ocfs2_update_disk_slot_extended()
183 static void ocfs2_update_disk_slot_old(struct ocfs2_slot_info *si, in ocfs2_update_disk_slot_old() argument
190 sm = (struct ocfs2_slot_map *)si->si_bh[0]->b_data; in ocfs2_update_disk_slot_old()
191 for (i = 0; i < si->si_num_slots; i++) { in ocfs2_update_disk_slot_old()
192 if (si->si_slots[i].sl_valid) in ocfs2_update_disk_slot_old()
194 cpu_to_le16(si->si_slots[i].sl_node_num); in ocfs2_update_disk_slot_old()
198 *bh = si->si_bh[0]; in ocfs2_update_disk_slot_old()
202 struct ocfs2_slot_info *si, in ocfs2_update_disk_slot() argument
209 if (si->si_extended) in ocfs2_update_disk_slot()
210 ocfs2_update_disk_slot_extended(si, slot_num, &bh); in ocfs2_update_disk_slot()
212 ocfs2_update_disk_slot_old(si, slot_num, &bh); in ocfs2_update_disk_slot()
215 status = ocfs2_write_block(osb, bh, INODE_CACHE(si->si_inode)); in ocfs2_update_disk_slot()
251 static int __ocfs2_node_num_to_slot(struct ocfs2_slot_info *si, in __ocfs2_node_num_to_slot() argument
256 for(i = 0; i < si->si_num_slots; i++) { in __ocfs2_node_num_to_slot()
257 if (si->si_slots[i].sl_valid && in __ocfs2_node_num_to_slot()
258 (node_num == si->si_slots[i].sl_node_num)) { in __ocfs2_node_num_to_slot()
267 static int __ocfs2_find_empty_slot(struct ocfs2_slot_info *si, in __ocfs2_find_empty_slot() argument
272 if ((preferred >= 0) && (preferred < si->si_num_slots)) { in __ocfs2_find_empty_slot()
273 if (!si->si_slots[preferred].sl_valid) { in __ocfs2_find_empty_slot()
279 for(i = 0; i < si->si_num_slots; i++) { in __ocfs2_find_empty_slot()
280 if (!si->si_slots[i].sl_valid) { in __ocfs2_find_empty_slot()
292 struct ocfs2_slot_info *si = osb->slot_info; in ocfs2_node_num_to_slot() local
295 slot = __ocfs2_node_num_to_slot(si, node_num); in ocfs2_node_num_to_slot()
304 struct ocfs2_slot_info *si = osb->slot_info; in ocfs2_slot_to_node_num_locked() local
311 if (!si->si_slots[slot_num].sl_valid) in ocfs2_slot_to_node_num_locked()
314 *node_num = si->si_slots[slot_num].sl_node_num; in ocfs2_slot_to_node_num_locked()
318 static void __ocfs2_free_slot_info(struct ocfs2_slot_info *si) in __ocfs2_free_slot_info() argument
322 if (si == NULL) in __ocfs2_free_slot_info()
325 iput(si->si_inode); in __ocfs2_free_slot_info()
326 if (si->si_bh) { in __ocfs2_free_slot_info()
327 for (i = 0; i < si->si_blocks; i++) { in __ocfs2_free_slot_info()
328 if (si->si_bh[i]) { in __ocfs2_free_slot_info()
329 brelse(si->si_bh[i]); in __ocfs2_free_slot_info()
330 si->si_bh[i] = NULL; in __ocfs2_free_slot_info()
333 kfree(si->si_bh); in __ocfs2_free_slot_info()
336 kfree(si); in __ocfs2_free_slot_info()
341 struct ocfs2_slot_info *si = osb->slot_info; in ocfs2_clear_slot() local
343 if (si == NULL) in ocfs2_clear_slot()
347 ocfs2_invalidate_slot(si, slot_num); in ocfs2_clear_slot()
354 struct ocfs2_slot_info *si) in ocfs2_map_slot_buffers() argument
362 status = ocfs2_slot_map_physical_size(osb, si->si_inode, &bytes); in ocfs2_map_slot_buffers()
366 blocks = ocfs2_blocks_for_bytes(si->si_inode->i_sb, bytes); in ocfs2_map_slot_buffers()
368 si->si_blocks = blocks; in ocfs2_map_slot_buffers()
369 if (!si->si_blocks) in ocfs2_map_slot_buffers()
372 if (si->si_extended) in ocfs2_map_slot_buffers()
373 si->si_slots_per_block = in ocfs2_map_slot_buffers()
377 si->si_slots_per_block = osb->sb->s_blocksize / sizeof(__le16); in ocfs2_map_slot_buffers()
380 BUG_ON((osb->max_slots / si->si_slots_per_block) > blocks); in ocfs2_map_slot_buffers()
382 trace_ocfs2_map_slot_buffers(bytes, si->si_blocks); in ocfs2_map_slot_buffers()
384 si->si_bh = kcalloc(si->si_blocks, sizeof(struct buffer_head *), in ocfs2_map_slot_buffers()
386 if (!si->si_bh) { in ocfs2_map_slot_buffers()
392 for (i = 0; i < si->si_blocks; i++) { in ocfs2_map_slot_buffers()
393 status = ocfs2_extent_map_get_blocks(si->si_inode, i, in ocfs2_map_slot_buffers()
403 status = ocfs2_read_blocks(INODE_CACHE(si->si_inode), blkno, in ocfs2_map_slot_buffers()
410 si->si_bh[i] = bh; in ocfs2_map_slot_buffers()
421 struct ocfs2_slot_info *si; in ocfs2_init_slot_info() local
423 si = kzalloc(sizeof(struct ocfs2_slot_info) + in ocfs2_init_slot_info()
426 if (!si) { in ocfs2_init_slot_info()
432 si->si_extended = ocfs2_uses_extended_slot_map(osb); in ocfs2_init_slot_info()
433 si->si_num_slots = osb->max_slots; in ocfs2_init_slot_info()
434 si->si_slots = (struct ocfs2_slot *)((char *)si + in ocfs2_init_slot_info()
445 si->si_inode = inode; in ocfs2_init_slot_info()
446 status = ocfs2_map_slot_buffers(osb, si); in ocfs2_init_slot_info()
452 osb->slot_info = (struct ocfs2_slot_info *)si; in ocfs2_init_slot_info()
455 __ocfs2_free_slot_info(si); in ocfs2_init_slot_info()
462 struct ocfs2_slot_info *si = osb->slot_info; in ocfs2_free_slot_info() local
465 __ocfs2_free_slot_info(si); in ocfs2_free_slot_info()
472 struct ocfs2_slot_info *si; in ocfs2_find_slot() local
474 si = osb->slot_info; in ocfs2_find_slot()
477 ocfs2_update_slot_info(si); in ocfs2_find_slot()
483 slot = __ocfs2_node_num_to_slot(si, osb->node_num); in ocfs2_find_slot()
487 slot = __ocfs2_find_empty_slot(si, osb->preferred_slot); in ocfs2_find_slot()
498 ocfs2_set_slot(si, slot, osb->node_num); in ocfs2_find_slot()
504 status = ocfs2_update_disk_slot(osb, si, osb->slot_num); in ocfs2_find_slot()
512 ocfs2_invalidate_slot(si, osb->slot_num); in ocfs2_find_slot()
524 struct ocfs2_slot_info *si = osb->slot_info; in ocfs2_put_slot() local
526 if (!si) in ocfs2_put_slot()
530 ocfs2_update_slot_info(si); in ocfs2_put_slot()
533 ocfs2_invalidate_slot(si, osb->slot_num); in ocfs2_put_slot()
537 status = ocfs2_update_disk_slot(osb, si, slot_num); in ocfs2_put_slot()