Lines Matching refs:fatent
42 static void fat12_ent_set_ptr(struct fat_entry *fatent, int offset) in fat12_ent_set_ptr() argument
44 struct buffer_head **bhs = fatent->bhs; in fat12_ent_set_ptr()
45 if (fatent->nr_bhs == 1) { in fat12_ent_set_ptr()
47 fatent->u.ent12_p[0] = bhs[0]->b_data + offset; in fat12_ent_set_ptr()
48 fatent->u.ent12_p[1] = bhs[0]->b_data + (offset + 1); in fat12_ent_set_ptr()
51 fatent->u.ent12_p[0] = bhs[0]->b_data + offset; in fat12_ent_set_ptr()
52 fatent->u.ent12_p[1] = bhs[1]->b_data; in fat12_ent_set_ptr()
56 static void fat16_ent_set_ptr(struct fat_entry *fatent, int offset) in fat16_ent_set_ptr() argument
59 fatent->u.ent16_p = (__le16 *)(fatent->bhs[0]->b_data + offset); in fat16_ent_set_ptr()
62 static void fat32_ent_set_ptr(struct fat_entry *fatent, int offset) in fat32_ent_set_ptr() argument
65 fatent->u.ent32_p = (__le32 *)(fatent->bhs[0]->b_data + offset); in fat32_ent_set_ptr()
68 static int fat12_ent_bread(struct super_block *sb, struct fat_entry *fatent, in fat12_ent_bread() argument
71 struct buffer_head **bhs = fatent->bhs; in fat12_ent_bread()
74 fatent->fat_inode = MSDOS_SB(sb)->fat_inode; in fat12_ent_bread()
81 fatent->nr_bhs = 1; in fat12_ent_bread()
88 fatent->nr_bhs = 2; in fat12_ent_bread()
90 fat12_ent_set_ptr(fatent, offset); in fat12_ent_bread()
101 static int fat_ent_bread(struct super_block *sb, struct fat_entry *fatent, in fat_ent_bread() argument
107 fatent->fat_inode = MSDOS_SB(sb)->fat_inode; in fat_ent_bread()
108 fatent->bhs[0] = sb_bread(sb, blocknr); in fat_ent_bread()
109 if (!fatent->bhs[0]) { in fat_ent_bread()
114 fatent->nr_bhs = 1; in fat_ent_bread()
115 ops->ent_set_ptr(fatent, offset); in fat_ent_bread()
119 static int fat12_ent_get(struct fat_entry *fatent) in fat12_ent_get() argument
121 u8 **ent12_p = fatent->u.ent12_p; in fat12_ent_get()
125 if (fatent->entry & 1) in fat12_ent_get()
137 static int fat16_ent_get(struct fat_entry *fatent) in fat16_ent_get() argument
139 int next = le16_to_cpu(*fatent->u.ent16_p); in fat16_ent_get()
140 WARN_ON((unsigned long)fatent->u.ent16_p & (2 - 1)); in fat16_ent_get()
146 static int fat32_ent_get(struct fat_entry *fatent) in fat32_ent_get() argument
148 int next = le32_to_cpu(*fatent->u.ent32_p) & 0x0fffffff; in fat32_ent_get()
149 WARN_ON((unsigned long)fatent->u.ent32_p & (4 - 1)); in fat32_ent_get()
155 static void fat12_ent_put(struct fat_entry *fatent, int new) in fat12_ent_put() argument
157 u8 **ent12_p = fatent->u.ent12_p; in fat12_ent_put()
163 if (fatent->entry & 1) { in fat12_ent_put()
172 mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); in fat12_ent_put()
173 if (fatent->nr_bhs == 2) in fat12_ent_put()
174 mark_buffer_dirty_inode(fatent->bhs[1], fatent->fat_inode); in fat12_ent_put()
177 static void fat16_ent_put(struct fat_entry *fatent, int new) in fat16_ent_put() argument
182 *fatent->u.ent16_p = cpu_to_le16(new); in fat16_ent_put()
183 mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); in fat16_ent_put()
186 static void fat32_ent_put(struct fat_entry *fatent, int new) in fat32_ent_put() argument
189 new |= le32_to_cpu(*fatent->u.ent32_p) & ~0x0fffffff; in fat32_ent_put()
190 *fatent->u.ent32_p = cpu_to_le32(new); in fat32_ent_put()
191 mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); in fat32_ent_put()
194 static int fat12_ent_next(struct fat_entry *fatent) in fat12_ent_next() argument
196 u8 **ent12_p = fatent->u.ent12_p; in fat12_ent_next()
197 struct buffer_head **bhs = fatent->bhs; in fat12_ent_next()
198 u8 *nextp = ent12_p[1] + 1 + (fatent->entry & 1); in fat12_ent_next()
200 fatent->entry++; in fat12_ent_next()
201 if (fatent->nr_bhs == 1) { in fat12_ent_next()
219 fatent->nr_bhs = 1; in fat12_ent_next()
227 static int fat16_ent_next(struct fat_entry *fatent) in fat16_ent_next() argument
229 const struct buffer_head *bh = fatent->bhs[0]; in fat16_ent_next()
230 fatent->entry++; in fat16_ent_next()
231 if (fatent->u.ent16_p < (__le16 *)(bh->b_data + (bh->b_size - 2))) { in fat16_ent_next()
232 fatent->u.ent16_p++; in fat16_ent_next()
235 fatent->u.ent16_p = NULL; in fat16_ent_next()
239 static int fat32_ent_next(struct fat_entry *fatent) in fat32_ent_next() argument
241 const struct buffer_head *bh = fatent->bhs[0]; in fat32_ent_next()
242 fatent->entry++; in fat32_ent_next()
243 if (fatent->u.ent32_p < (__le32 *)(bh->b_data + (bh->b_size - 4))) { in fat32_ent_next()
244 fatent->u.ent32_p++; in fat32_ent_next()
247 fatent->u.ent32_p = NULL; in fat32_ent_next()
319 struct fat_entry *fatent, in fat_ent_update_ptr() argument
324 struct buffer_head **bhs = fatent->bhs; in fat_ent_update_ptr()
327 if (!fatent->nr_bhs || bhs[0]->b_blocknr != blocknr) in fat_ent_update_ptr()
332 if (fatent->nr_bhs == 2) { in fat_ent_update_ptr()
334 fatent->nr_bhs = 1; in fat_ent_update_ptr()
338 if (fatent->nr_bhs != 2) in fat_ent_update_ptr()
344 ops->ent_set_ptr(fatent, offset); in fat_ent_update_ptr()
348 int fat_ent_read(struct inode *inode, struct fat_entry *fatent, int entry) in fat_ent_read() argument
357 fatent_brelse(fatent); in fat_ent_read()
362 fatent_set_entry(fatent, entry); in fat_ent_read()
365 if (!fat_ent_update_ptr(sb, fatent, offset, blocknr)) { in fat_ent_read()
366 fatent_brelse(fatent); in fat_ent_read()
367 err = ops->ent_bread(sb, fatent, offset, blocknr); in fat_ent_read()
371 return ops->ent_get(fatent); in fat_ent_read()
409 int fat_ent_write(struct inode *inode, struct fat_entry *fatent, in fat_ent_write() argument
416 ops->ent_put(fatent, new); in fat_ent_write()
418 err = fat_sync_bhs(fatent->bhs, fatent->nr_bhs); in fat_ent_write()
422 return fat_mirror_bhs(sb, fatent->bhs, fatent->nr_bhs); in fat_ent_write()
426 struct fat_entry *fatent) in fat_ent_next() argument
428 if (sbi->fatent_ops->ent_next(fatent)) { in fat_ent_next()
429 if (fatent->entry < sbi->max_cluster) in fat_ent_next()
436 struct fat_entry *fatent) in fat_ent_read_block() argument
442 fatent_brelse(fatent); in fat_ent_read_block()
443 ops->ent_blocknr(sb, fatent->entry, &offset, &blocknr); in fat_ent_read_block()
444 return ops->ent_bread(sb, fatent, offset, blocknr); in fat_ent_read_block()
448 struct fat_entry *fatent) in fat_collect_bhs() argument
452 for (n = 0; n < fatent->nr_bhs; n++) { in fat_collect_bhs()
454 if (fatent->bhs[n] == bhs[i]) in fat_collect_bhs()
458 get_bh(fatent->bhs[n]); in fat_collect_bhs()
459 bhs[i] = fatent->bhs[n]; in fat_collect_bhs()
470 struct fat_entry fatent, prev_ent; in fat_alloc_clusters() local
486 fatent_init(&fatent); in fat_alloc_clusters()
487 fatent_set_entry(&fatent, sbi->prev_free + 1); in fat_alloc_clusters()
489 if (fatent.entry >= sbi->max_cluster) in fat_alloc_clusters()
490 fatent.entry = FAT_START_ENT; in fat_alloc_clusters()
491 fatent_set_entry(&fatent, fatent.entry); in fat_alloc_clusters()
492 err = fat_ent_read_block(sb, &fatent); in fat_alloc_clusters()
498 if (ops->ent_get(&fatent) == FAT_ENT_FREE) { in fat_alloc_clusters()
499 int entry = fatent.entry; in fat_alloc_clusters()
502 ops->ent_put(&fatent, FAT_ENT_EOF); in fat_alloc_clusters()
506 fat_collect_bhs(bhs, &nr_bhs, &fatent); in fat_alloc_clusters()
521 prev_ent = fatent; in fat_alloc_clusters()
526 } while (fat_ent_next(sbi, &fatent)); in fat_alloc_clusters()
537 fatent_brelse(&fatent); in fat_alloc_clusters()
558 struct fat_entry fatent; in fat_free_clusters() local
564 fatent_init(&fatent); in fat_free_clusters()
567 cluster = fat_ent_read(inode, &fatent, cluster); in fat_free_clusters()
584 if (cluster != fatent.entry + 1) { in fat_free_clusters()
585 int nr_clus = fatent.entry - first_cl + 1; in fat_free_clusters()
596 ops->ent_put(&fatent, FAT_ENT_FREE); in fat_free_clusters()
602 if (nr_bhs + fatent.nr_bhs > MAX_BUF_PER_PAGE) { in fat_free_clusters()
615 fat_collect_bhs(bhs, &nr_bhs, &fatent); in fat_free_clusters()
625 fatent_brelse(&fatent); in fat_free_clusters()
647 struct fat_entry *fatent, int ent_limit) in fat_ra_init() argument
661 if (fatent->entry >= ent_limit) in fat_ra_init()
669 ops->ent_blocknr(sb, fatent->entry, &offset, &blocknr); in fat_ra_init()
683 struct fat_entry *fatent) in fat_ent_reada() argument
695 ops->ent_blocknr(sb, fatent->entry, &offset, &blocknr); in fat_ent_reada()
719 struct fat_entry fatent; in fat_count_free_clusters() local
728 fatent_init(&fatent); in fat_count_free_clusters()
729 fatent_set_entry(&fatent, FAT_START_ENT); in fat_count_free_clusters()
730 fat_ra_init(sb, &fatent_ra, &fatent, sbi->max_cluster); in fat_count_free_clusters()
731 while (fatent.entry < sbi->max_cluster) { in fat_count_free_clusters()
733 fat_ent_reada(sb, &fatent_ra, &fatent); in fat_count_free_clusters()
735 err = fat_ent_read_block(sb, &fatent); in fat_count_free_clusters()
740 if (ops->ent_get(&fatent) == FAT_ENT_FREE) in fat_count_free_clusters()
742 } while (fat_ent_next(sbi, &fatent)); in fat_count_free_clusters()
748 fatent_brelse(&fatent); in fat_count_free_clusters()
766 struct fat_entry fatent; in fat_trim_fs() local
787 fatent_init(&fatent); in fat_trim_fs()
789 fatent_set_entry(&fatent, ent_start); in fat_trim_fs()
790 fat_ra_init(sb, &fatent_ra, &fatent, ent_end + 1); in fat_trim_fs()
791 while (fatent.entry <= ent_end) { in fat_trim_fs()
793 fat_ent_reada(sb, &fatent_ra, &fatent); in fat_trim_fs()
795 err = fat_ent_read_block(sb, &fatent); in fat_trim_fs()
799 if (ops->ent_get(&fatent) == FAT_ENT_FREE) { in fat_trim_fs()
803 u32 clus = fatent.entry - free; in fat_trim_fs()
814 } while (fat_ent_next(sbi, &fatent) && fatent.entry <= ent_end); in fat_trim_fs()
822 fatent_brelse(&fatent); in fat_trim_fs()
830 u32 clus = fatent.entry - free; in fat_trim_fs()
841 fatent_brelse(&fatent); in fat_trim_fs()