Lines Matching refs:fatent

43 static void fat12_ent_set_ptr(struct fat_entry *fatent, int offset)  in fat12_ent_set_ptr()  argument
45 struct buffer_head **bhs = fatent->bhs; in fat12_ent_set_ptr()
46 if (fatent->nr_bhs == 1) { in fat12_ent_set_ptr()
48 fatent->u.ent12_p[0] = bhs[0]->b_data + offset; in fat12_ent_set_ptr()
49 fatent->u.ent12_p[1] = bhs[0]->b_data + (offset + 1); in fat12_ent_set_ptr()
52 fatent->u.ent12_p[0] = bhs[0]->b_data + offset; in fat12_ent_set_ptr()
53 fatent->u.ent12_p[1] = bhs[1]->b_data; in fat12_ent_set_ptr()
57 static void fat16_ent_set_ptr(struct fat_entry *fatent, int offset) in fat16_ent_set_ptr() argument
60 fatent->u.ent16_p = (__le16 *)(fatent->bhs[0]->b_data + offset); in fat16_ent_set_ptr()
63 static void fat32_ent_set_ptr(struct fat_entry *fatent, int offset) in fat32_ent_set_ptr() argument
66 fatent->u.ent32_p = (__le32 *)(fatent->bhs[0]->b_data + offset); in fat32_ent_set_ptr()
69 static int fat12_ent_bread(struct super_block *sb, struct fat_entry *fatent, in fat12_ent_bread() argument
72 struct buffer_head **bhs = fatent->bhs; in fat12_ent_bread()
75 fatent->fat_inode = MSDOS_SB(sb)->fat_inode; in fat12_ent_bread()
82 fatent->nr_bhs = 1; in fat12_ent_bread()
89 fatent->nr_bhs = 2; in fat12_ent_bread()
91 fat12_ent_set_ptr(fatent, offset); in fat12_ent_bread()
102 static int fat_ent_bread(struct super_block *sb, struct fat_entry *fatent, in fat_ent_bread() argument
108 fatent->fat_inode = MSDOS_SB(sb)->fat_inode; in fat_ent_bread()
109 fatent->bhs[0] = sb_bread(sb, blocknr); in fat_ent_bread()
110 if (!fatent->bhs[0]) { in fat_ent_bread()
115 fatent->nr_bhs = 1; in fat_ent_bread()
116 ops->ent_set_ptr(fatent, offset); in fat_ent_bread()
120 static int fat12_ent_get(struct fat_entry *fatent) in fat12_ent_get() argument
122 u8 **ent12_p = fatent->u.ent12_p; in fat12_ent_get()
126 if (fatent->entry & 1) in fat12_ent_get()
138 static int fat16_ent_get(struct fat_entry *fatent) in fat16_ent_get() argument
140 int next = le16_to_cpu(*fatent->u.ent16_p); in fat16_ent_get()
141 WARN_ON((unsigned long)fatent->u.ent16_p & (2 - 1)); in fat16_ent_get()
147 static int fat32_ent_get(struct fat_entry *fatent) in fat32_ent_get() argument
149 int next = le32_to_cpu(*fatent->u.ent32_p) & 0x0fffffff; in fat32_ent_get()
150 WARN_ON((unsigned long)fatent->u.ent32_p & (4 - 1)); in fat32_ent_get()
156 static void fat12_ent_put(struct fat_entry *fatent, int new) in fat12_ent_put() argument
158 u8 **ent12_p = fatent->u.ent12_p; in fat12_ent_put()
164 if (fatent->entry & 1) { in fat12_ent_put()
173 mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); in fat12_ent_put()
174 if (fatent->nr_bhs == 2) in fat12_ent_put()
175 mark_buffer_dirty_inode(fatent->bhs[1], fatent->fat_inode); in fat12_ent_put()
178 static void fat16_ent_put(struct fat_entry *fatent, int new) in fat16_ent_put() argument
183 *fatent->u.ent16_p = cpu_to_le16(new); in fat16_ent_put()
184 mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); in fat16_ent_put()
187 static void fat32_ent_put(struct fat_entry *fatent, int new) in fat32_ent_put() argument
190 new |= le32_to_cpu(*fatent->u.ent32_p) & ~0x0fffffff; in fat32_ent_put()
191 *fatent->u.ent32_p = cpu_to_le32(new); in fat32_ent_put()
192 mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); in fat32_ent_put()
195 static int fat12_ent_next(struct fat_entry *fatent) in fat12_ent_next() argument
197 u8 **ent12_p = fatent->u.ent12_p; in fat12_ent_next()
198 struct buffer_head **bhs = fatent->bhs; in fat12_ent_next()
199 u8 *nextp = ent12_p[1] + 1 + (fatent->entry & 1); in fat12_ent_next()
201 fatent->entry++; in fat12_ent_next()
202 if (fatent->nr_bhs == 1) { in fat12_ent_next()
220 fatent->nr_bhs = 1; in fat12_ent_next()
228 static int fat16_ent_next(struct fat_entry *fatent) in fat16_ent_next() argument
230 const struct buffer_head *bh = fatent->bhs[0]; in fat16_ent_next()
231 fatent->entry++; in fat16_ent_next()
232 if (fatent->u.ent16_p < (__le16 *)(bh->b_data + (bh->b_size - 2))) { in fat16_ent_next()
233 fatent->u.ent16_p++; in fat16_ent_next()
236 fatent->u.ent16_p = NULL; in fat16_ent_next()
240 static int fat32_ent_next(struct fat_entry *fatent) in fat32_ent_next() argument
242 const struct buffer_head *bh = fatent->bhs[0]; in fat32_ent_next()
243 fatent->entry++; in fat32_ent_next()
244 if (fatent->u.ent32_p < (__le32 *)(bh->b_data + (bh->b_size - 4))) { in fat32_ent_next()
245 fatent->u.ent32_p++; in fat32_ent_next()
248 fatent->u.ent32_p = NULL; in fat32_ent_next()
320 struct fat_entry *fatent, in fat_ent_update_ptr() argument
325 struct buffer_head **bhs = fatent->bhs; in fat_ent_update_ptr()
328 if (!fatent->nr_bhs || bhs[0]->b_blocknr != blocknr) in fat_ent_update_ptr()
333 if (fatent->nr_bhs == 2) { in fat_ent_update_ptr()
335 fatent->nr_bhs = 1; in fat_ent_update_ptr()
339 if (fatent->nr_bhs != 2) in fat_ent_update_ptr()
345 ops->ent_set_ptr(fatent, offset); in fat_ent_update_ptr()
349 int fat_ent_read(struct inode *inode, struct fat_entry *fatent, int entry) in fat_ent_read() argument
358 fatent_brelse(fatent); in fat_ent_read()
363 fatent_set_entry(fatent, entry); in fat_ent_read()
366 if (!fat_ent_update_ptr(sb, fatent, offset, blocknr)) { in fat_ent_read()
367 fatent_brelse(fatent); in fat_ent_read()
368 err = ops->ent_bread(sb, fatent, offset, blocknr); in fat_ent_read()
372 return ops->ent_get(fatent); in fat_ent_read()
410 int fat_ent_write(struct inode *inode, struct fat_entry *fatent, in fat_ent_write() argument
417 ops->ent_put(fatent, new); in fat_ent_write()
419 err = fat_sync_bhs(fatent->bhs, fatent->nr_bhs); in fat_ent_write()
423 return fat_mirror_bhs(sb, fatent->bhs, fatent->nr_bhs); in fat_ent_write()
427 struct fat_entry *fatent) in fat_ent_next() argument
429 if (sbi->fatent_ops->ent_next(fatent)) { in fat_ent_next()
430 if (fatent->entry < sbi->max_cluster) in fat_ent_next()
437 struct fat_entry *fatent) in fat_ent_read_block() argument
443 fatent_brelse(fatent); in fat_ent_read_block()
444 ops->ent_blocknr(sb, fatent->entry, &offset, &blocknr); in fat_ent_read_block()
445 return ops->ent_bread(sb, fatent, offset, blocknr); in fat_ent_read_block()
449 struct fat_entry *fatent) in fat_collect_bhs() argument
453 for (n = 0; n < fatent->nr_bhs; n++) { in fat_collect_bhs()
455 if (fatent->bhs[n] == bhs[i]) in fat_collect_bhs()
459 get_bh(fatent->bhs[n]); in fat_collect_bhs()
460 bhs[i] = fatent->bhs[n]; in fat_collect_bhs()
471 struct fat_entry fatent, prev_ent; in fat_alloc_clusters() local
487 fatent_init(&fatent); in fat_alloc_clusters()
488 fatent_set_entry(&fatent, sbi->prev_free + 1); in fat_alloc_clusters()
490 if (fatent.entry >= sbi->max_cluster) in fat_alloc_clusters()
491 fatent.entry = FAT_START_ENT; in fat_alloc_clusters()
492 fatent_set_entry(&fatent, fatent.entry); in fat_alloc_clusters()
493 err = fat_ent_read_block(sb, &fatent); in fat_alloc_clusters()
499 if (ops->ent_get(&fatent) == FAT_ENT_FREE) { in fat_alloc_clusters()
500 int entry = fatent.entry; in fat_alloc_clusters()
503 ops->ent_put(&fatent, FAT_ENT_EOF); in fat_alloc_clusters()
507 fat_collect_bhs(bhs, &nr_bhs, &fatent); in fat_alloc_clusters()
522 prev_ent = fatent; in fat_alloc_clusters()
527 } while (fat_ent_next(sbi, &fatent)); in fat_alloc_clusters()
538 fatent_brelse(&fatent); in fat_alloc_clusters()
559 struct fat_entry fatent; in fat_free_clusters() local
565 fatent_init(&fatent); in fat_free_clusters()
568 cluster = fat_ent_read(inode, &fatent, cluster); in fat_free_clusters()
585 if (cluster != fatent.entry + 1) { in fat_free_clusters()
586 int nr_clus = fatent.entry - first_cl + 1; in fat_free_clusters()
597 ops->ent_put(&fatent, FAT_ENT_FREE); in fat_free_clusters()
603 if (nr_bhs + fatent.nr_bhs > MAX_BUF_PER_PAGE) { in fat_free_clusters()
616 fat_collect_bhs(bhs, &nr_bhs, &fatent); in fat_free_clusters()
626 fatent_brelse(&fatent); in fat_free_clusters()
648 struct fat_entry *fatent, int ent_limit) in fat_ra_init() argument
662 if (fatent->entry >= ent_limit) in fat_ra_init()
670 ops->ent_blocknr(sb, fatent->entry, &offset, &blocknr); in fat_ra_init()
684 struct fat_entry *fatent) in fat_ent_reada() argument
696 ops->ent_blocknr(sb, fatent->entry, &offset, &blocknr); in fat_ent_reada()
720 struct fat_entry fatent; in fat_count_free_clusters() local
729 fatent_init(&fatent); in fat_count_free_clusters()
730 fatent_set_entry(&fatent, FAT_START_ENT); in fat_count_free_clusters()
731 fat_ra_init(sb, &fatent_ra, &fatent, sbi->max_cluster); in fat_count_free_clusters()
732 while (fatent.entry < sbi->max_cluster) { in fat_count_free_clusters()
734 fat_ent_reada(sb, &fatent_ra, &fatent); in fat_count_free_clusters()
736 err = fat_ent_read_block(sb, &fatent); in fat_count_free_clusters()
741 if (ops->ent_get(&fatent) == FAT_ENT_FREE) in fat_count_free_clusters()
743 } while (fat_ent_next(sbi, &fatent)); in fat_count_free_clusters()
749 fatent_brelse(&fatent); in fat_count_free_clusters()
767 struct fat_entry fatent; in fat_trim_fs() local
788 fatent_init(&fatent); in fat_trim_fs()
790 fatent_set_entry(&fatent, ent_start); in fat_trim_fs()
791 fat_ra_init(sb, &fatent_ra, &fatent, ent_end + 1); in fat_trim_fs()
792 while (fatent.entry <= ent_end) { in fat_trim_fs()
794 fat_ent_reada(sb, &fatent_ra, &fatent); in fat_trim_fs()
796 err = fat_ent_read_block(sb, &fatent); in fat_trim_fs()
800 if (ops->ent_get(&fatent) == FAT_ENT_FREE) { in fat_trim_fs()
804 u32 clus = fatent.entry - free; in fat_trim_fs()
815 } while (fat_ent_next(sbi, &fatent) && fatent.entry <= ent_end); in fat_trim_fs()
823 fatent_brelse(&fatent); in fat_trim_fs()
831 u32 clus = fatent.entry - free; in fat_trim_fs()
842 fatent_brelse(&fatent); in fat_trim_fs()