summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-31 13:51:41 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-31 13:51:41 +0200
commit6b24b881239e6bebea49656888637f4789456c25 (patch)
tree3834cada3bd776077430a02c4565cf1416fa812c
parentMerge branch 'upstream' (diff)
parentdosfs: Fix format request with sectors per cluster (diff)
downloadrtems-6b24b881239e6bebea49656888637f4789456c25.tar.bz2
Merge branch 'upstream'
-rw-r--r--cpukit/libfs/src/dosfs/msdos_format.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos_format.c b/cpukit/libfs/src/dosfs/msdos_format.c
index 9af86b7d62..305cec9596 100644
--- a/cpukit/libfs/src/dosfs/msdos_format.c
+++ b/cpukit/libfs/src/dosfs/msdos_format.c
@@ -484,14 +484,22 @@ static int msdos_format_determine_fmt_params
* NOTE: maximum sect_per_clust is arbitrarily choosen with values that
* are a compromise concerning capacity and efficency
*/
+ uint32_t fat12_sect_per_clust = 8;
+ uint32_t fat16_sect_per_clust = 32;
+
+ if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
+ fat12_sect_per_clust = rqdata->sectors_per_cluster;
+ fat16_sect_per_clust = rqdata->sectors_per_cluster;
+ }
+
if (fmt_params->totl_sector_cnt
- < ((uint32_t)FAT_FAT12_MAX_CLN)*8) {
+ < FAT_FAT12_MAX_CLN * fat12_sect_per_clust) {
fmt_params->fattype = FAT_FAT12;
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else if (fmt_params->totl_sector_cnt
- < ((uint32_t)FAT_FAT16_MAX_CLN)*32) {
+ < FAT_FAT16_MAX_CLN * fat16_sect_per_clust) {
fmt_params->fattype = FAT_FAT16;
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;