Merge git://git.denx.de/u-boot-fsl-qoriq
[oweals/u-boot.git] / fs / fat / fat.c
index 3d3e17e8facc839fe120fe0536d6ded6ad9bdbe2..7fe78439cf162bb264751cac0bb569521406c610 100644 (file)
@@ -495,7 +495,7 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int *fatsize)
                return -1;
        }
 
-       block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz);
+       block = malloc_cache_aligned(cur_dev->blksz);
        if (block == NULL) {
                debug("Error: allocating block\n");
                return -1;
@@ -599,7 +599,7 @@ static int get_fs_info(fsdata *mydata)
 
        mydata->fatbufnum = -1;
        mydata->fat_dirty = 0;
-       mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE);
+       mydata->fatbuf = malloc_cache_aligned(FATBUFSIZE);
        if (mydata->fatbuf == NULL) {
                debug("Error: allocating memory\n");
                return -1;
@@ -1038,13 +1038,16 @@ int fat_exists(const char *filename)
        fat_itr *itr;
        int ret;
 
-       itr = malloc(sizeof(fat_itr));
+       itr = malloc_cache_aligned(sizeof(fat_itr));
+       if (!itr)
+               return 0;
        ret = fat_itr_root(itr, &fsdata);
        if (ret)
-               return 0;
+               goto out;
 
        ret = fat_itr_resolve(itr, filename, TYPE_ANY);
        free(fsdata.fatbuf);
+out:
        free(itr);
        return ret == 0;
 }
@@ -1055,10 +1058,12 @@ int fat_size(const char *filename, loff_t *size)
        fat_itr *itr;
        int ret;
 
-       itr = malloc(sizeof(fat_itr));
+       itr = malloc_cache_aligned(sizeof(fat_itr));
+       if (!itr)
+               return -ENOMEM;
        ret = fat_itr_root(itr, &fsdata);
        if (ret)
-               return ret;
+               goto out_free_itr;
 
        ret = fat_itr_resolve(itr, filename, TYPE_FILE);
        if (ret) {
@@ -1072,12 +1077,13 @@ int fat_size(const char *filename, loff_t *size)
                        *size = 0;
                        ret = 0;
                }
-               goto out;
+               goto out_free_both;
        }
 
        *size = FAT2CPU32(itr->dent->size);
+out_free_both:
        free(fsdata.fatbuf);
-out:
+out_free_itr:
        free(itr);
        return ret;
 }
@@ -1089,20 +1095,23 @@ int file_fat_read_at(const char *filename, loff_t pos, void *buffer,
        fat_itr *itr;
        int ret;
 
-       itr = malloc(sizeof(fat_itr));
+       itr = malloc_cache_aligned(sizeof(fat_itr));
+       if (!itr)
+               return -ENOMEM;
        ret = fat_itr_root(itr, &fsdata);
        if (ret)
-               return ret;
+               goto out_free_itr;
 
        ret = fat_itr_resolve(itr, filename, TYPE_FILE);
        if (ret)
-               goto out;
+               goto out_free_both;
 
        printf("reading %s\n", filename);
        ret = get_contents(&fsdata, itr->dent, pos, buffer, maxsize, actread);
 
-out:
+out_free_both:
        free(fsdata.fatbuf);
+out_free_itr:
        free(itr);
        return ret;
 }
@@ -1148,17 +1157,18 @@ int fat_opendir(const char *filename, struct fs_dir_stream **dirsp)
 
        ret = fat_itr_root(&dir->itr, &dir->fsdata);
        if (ret)
-               goto fail;
+               goto fail_free_dir;
 
        ret = fat_itr_resolve(&dir->itr, filename, TYPE_DIR);
        if (ret)
-               goto fail;
+               goto fail_free_both;
 
        *dirsp = (struct fs_dir_stream *)dir;
        return 0;
 
-fail:
+fail_free_both:
        free(dir->fsdata.fatbuf);
+fail_free_dir:
        free(dir);
        return ret;
 }