• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/ocfs2/

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,
68 BUG_ON((slot_num < 0) || (slot_num >= si->si_num_slots));
69 si->si_slots[slot_num].sl_valid = 0;
72 static void ocfs2_set_slot(struct ocfs2_slot_info *si,
75 BUG_ON((slot_num < 0) || (slot_num >= si->si_num_slots));
77 si->si_slots[slot_num].sl_valid = 1;
78 si->si_slots[slot_num].sl_node_num = node_num;
82 static void ocfs2_update_slot_info_extended(struct ocfs2_slot_info *si)
88 for (b = 0; b < si->si_blocks; b++) {
89 se = (struct ocfs2_slot_map_extended *)si->si_bh[b]->b_data;
91 (i < si->si_slots_per_block) &&
92 (slotno < si->si_num_slots);
95 ocfs2_set_slot(si, slotno,
98 ocfs2_invalidate_slot(si, slotno);
107 static void ocfs2_update_slot_info_old(struct ocfs2_slot_info *si)
112 sm = (struct ocfs2_slot_map *)si->si_bh[0]->b_data;
114 for (i = 0; i < si->si_num_slots; i++) {
116 ocfs2_invalidate_slot(si, i);
118 ocfs2_set_slot(si, i, le16_to_cpu(sm->sm_slots[i]));
122 static void ocfs2_update_slot_info(struct ocfs2_slot_info *si)
128 if (si->si_extended)
129 ocfs2_update_slot_info_extended(si);
131 ocfs2_update_slot_info_old(si);
137 struct ocfs2_slot_info *si = osb->slot_info;
139 if (si == NULL)
142 BUG_ON(si->si_blocks == 0);
143 BUG_ON(si->si_bh == NULL);
146 si->si_blocks);
149 * We pass -1 as blocknr because we expect all of si->si_bh to
153 ret = ocfs2_read_blocks(INODE_CACHE(si->si_inode), -1, si->si_blocks,
154 si->si_bh, OCFS2_BH_IGNORE_CACHE, NULL);
157 ocfs2_update_slot_info(si);
166 static void ocfs2_update_disk_slot_extended(struct ocfs2_slot_info *si,
170 int blkind = slot_num / si->si_slots_per_block;
171 int slotno = slot_num % si->si_slots_per_block;
174 BUG_ON(blkind >= si->si_blocks);
176 se = (struct ocfs2_slot_map_extended *)si->si_bh[blkind]->b_data;
177 se->se_slots[slotno].es_valid = si->si_slots[slot_num].sl_valid;
178 if (si->si_slots[slot_num].sl_valid)
180 cpu_to_le32(si->si_slots[slot_num].sl_node_num);
181 *bh = si->si_bh[blkind];
184 static void ocfs2_update_disk_slot_old(struct ocfs2_slot_info *si,
191 sm = (struct ocfs2_slot_map *)si->si_bh[0]->b_data;
192 for (i = 0; i < si->si_num_slots; i++) {
193 if (si->si_slots[i].sl_valid)
195 cpu_to_le16(si->si_slots[i].sl_node_num);
199 *bh = si->si_bh[0];
203 struct ocfs2_slot_info *si,
210 if (si->si_extended)
211 ocfs2_update_disk_slot_extended(si, slot_num, &bh);
213 ocfs2_update_disk_slot_old(si, slot_num, &bh);
216 status = ocfs2_write_block(osb, bh, INODE_CACHE(si->si_inode));
252 static int __ocfs2_node_num_to_slot(struct ocfs2_slot_info *si,
257 for(i = 0; i < si->si_num_slots; i++) {
258 if (si->si_slots[i].sl_valid &&
259 (node_num == si->si_slots[i].sl_node_num)) {
268 static int __ocfs2_find_empty_slot(struct ocfs2_slot_info *si,
273 if ((preferred >= 0) && (preferred < si->si_num_slots)) {
274 if (!si->si_slots[preferred].sl_valid) {
280 for(i = 0; i < si->si_num_slots; i++) {
281 if (!si->si_slots[i].sl_valid) {
293 struct ocfs2_slot_info *si = osb->slot_info;
296 slot = __ocfs2_node_num_to_slot(si, node_num);
305 struct ocfs2_slot_info *si = osb->slot_info;
312 if (!si->si_slots[slot_num].sl_valid)
315 *node_num = si->si_slots[slot_num].sl_node_num;
319 static void __ocfs2_free_slot_info(struct ocfs2_slot_info *si)
323 if (si == NULL)
326 if (si->si_inode)
327 iput(si->si_inode);
328 if (si->si_bh) {
329 for (i = 0; i < si->si_blocks; i++) {
330 if (si->si_bh[i]) {
331 brelse(si->si_bh[i]);
332 si->si_bh[i] = NULL;
335 kfree(si->si_bh);
338 kfree(si);
343 struct ocfs2_slot_info *si = osb->slot_info;
345 if (si == NULL)
349 ocfs2_invalidate_slot(si, slot_num);
356 struct ocfs2_slot_info *si)
364 status = ocfs2_slot_map_physical_size(osb, si->si_inode, &bytes);
368 blocks = ocfs2_blocks_for_bytes(si->si_inode->i_sb, bytes);
370 si->si_blocks = blocks;
371 if (!si->si_blocks)
374 if (si->si_extended)
375 si->si_slots_per_block =
379 si->si_slots_per_block = osb->sb->s_blocksize / sizeof(__le16);
382 BUG_ON((osb->max_slots / si->si_slots_per_block) > blocks);
385 si->si_blocks, bytes);
387 si->si_bh = kzalloc(sizeof(struct buffer_head *) * si->si_blocks,
389 if (!si->si_bh) {
395 for (i = 0; i < si->si_blocks; i++) {
396 status = ocfs2_extent_map_get_blocks(si->si_inode, i,
407 status = ocfs2_read_blocks(INODE_CACHE(si->si_inode), blkno,
414 si->si_bh[i] = bh;
425 struct ocfs2_slot_info *si;
427 si = kzalloc(sizeof(struct ocfs2_slot_info) +
430 if (!si) {
436 si->si_extended = ocfs2_uses_extended_slot_map(osb);
437 si->si_num_slots = osb->max_slots;
438 si->si_slots = (struct ocfs2_slot *)((char *)si +
449 si->si_inode = inode;
450 status = ocfs2_map_slot_buffers(osb, si);
456 osb->slot_info = (struct ocfs2_slot_info *)si;
458 if (status < 0 && si)
459 __ocfs2_free_slot_info(si);
466 struct ocfs2_slot_info *si = osb->slot_info;
469 __ocfs2_free_slot_info(si);
476 struct ocfs2_slot_info *si;
480 si = osb->slot_info;
483 ocfs2_update_slot_info(si);
489 slot = __ocfs2_node_num_to_slot(si, osb->node_num);
493 slot = __ocfs2_find_empty_slot(si, osb->preferred_slot);
504 ocfs2_set_slot(si, slot, osb->node_num);
510 status = ocfs2_update_disk_slot(osb, si, osb->slot_num);
522 struct ocfs2_slot_info *si = osb->slot_info;
524 if (!si)
528 ocfs2_update_slot_info(si);
531 ocfs2_invalidate_slot(si, osb->slot_num);
535 status = ocfs2_update_disk_slot(osb, si, slot_num);