Re: [PATCH v5] fs: FAT: Add support for DOS 1.x formatted volumes

From: Conrad Meyer
Date: Sun Apr 13 2014 - 19:35:37 EST


On Mon, 14 Apr 2014 07:14:51 +0900
OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx> wrote:

> Conrad Meyer <cse.cem@xxxxxxxxx> writes:
>
> > + sbi->sec_per_clus = fdefaults->sec_per_clus;
> > + sbi->cluster_size = sb->s_blocksize *
> > sbi->sec_per_clus;
> > + sbi->cluster_bits = ffs(sbi->cluster_size) - 1;
> > + sbi->fats = 2;
> > + sbi->fat_start = 1;
> > + sbi->fat_length = fdefaults->fat_length;
> > +
> > + sbi->dir_per_block = sb->s_blocksize /
> > sizeof(struct msdos_dir_entry);
> > + sbi->dir_per_block_bits =
> > ffs(sbi->dir_per_block) - 1;
> > + sbi->dir_start = sbi->fat_start + sbi->fats *
> > sbi->fat_length;
> > + sbi->dir_entries = fdefaults->dir_entries;
> > +
> > + rootdir_sectors = sbi->dir_entries
> > + * sizeof(struct msdos_dir_entry) /
> > sb->s_blocksize;
> > + sbi->data_start = sbi->dir_start +
> > rootdir_sectors;
> > + total_sectors = fdefaults->nr_sectors;
> > + total_clusters = (total_sectors -
> > sbi->data_start) / sbi->sec_per_clus;
> > + sbi->fat_bits = (total_clusters > MAX_FAT12) ?
> > 16 : 12; +
> > + /* some OSes set FAT_STATE_DIRTY and clean it on
> > unmount. */
> > + sbi->dirty = b->fat16.state & FAT_STATE_DIRTY;
> > +
> > + /* check that FAT table does not overflow */
> > + fat_clusters = calc_fat_clusters(sb);
> > + total_clusters = min(total_clusters,
> > fat_clusters - FAT_START_ENT);
>
> Ah, you meant this duplicated one.
>
> Let's use structure like fat_boot_sector (but more cpu
> friendly) on stack or something, instead of modify bh
> (BPB). Modifying bh in bdev is visible via /dev/foo, this
> is why I want to avoid to modify.
>
> With this, we can share almost all codes on both of
> read_bpb() and static_bpb(), and avoids to modify bdev
> buffer? And those 2 helpers only has small chunk of code,
> and provide the required parameters?
>
> Thanks.

Hi,

I think I understand the idea, sounds good to me. Working to
clean up now.

Thanks again,
Conrad
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/