SPDX: Convert all of our single license tags to Linux Kernel style
[platform/kernel/u-boot.git] / fs / zfs / zfs.c
index 2db45b1..4331c16 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *
  * ZFS filesystem ported to u-boot by
@@ -7,20 +8,6 @@
  *     Copyright (C) 1999,2000,2001,2002,2003,2004
  *     Free Software Foundation, Inc.
  *     Copyright 2004  Sun Microsystems, Inc.
- *
- *     GRUB is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU General Public License as published by
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- *
- *     GRUB is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public License
- *     along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
- *
  */
 
 #include <common.h>
@@ -30,8 +17,9 @@
 #include <linux/ctype.h>
 #include <asm/byteorder.h>
 #include "zfs_common.h"
+#include "div64.h"
 
-block_dev_desc_t *zfs_dev_desc;
+struct blk_desc *zfs_dev_desc;
 
 /*
  * The zfs plug-in routines for GRUB are:
@@ -747,7 +735,7 @@ zap_hash(uint64_t salt, const char *name)
        uint64_t crc = salt;
 
        if (table[128] == 0) {
-               uint64_t *ct;
+               uint64_t *ct = NULL;
                int i, j;
                for (i = 0; i < 256; i++) {
                        for (ct = table + i, *ct = i, j = 8; j > 0; j--)
@@ -783,7 +771,7 @@ zap_leaf_array_equal(zap_leaf_phys_t *l, zfs_endian_t endian,
 
        while (bseen < array_len) {
                struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, blksft, chunk).l_array;
-               int toread = MIN(array_len - bseen, ZAP_LEAF_ARRAY_BYTES);
+               int toread = min(array_len - bseen, ZAP_LEAF_ARRAY_BYTES);
 
                if (chunk >= ZAP_LEAF_NUMCHUNKS(blksft))
                        return 0;
@@ -805,7 +793,7 @@ zap_leaf_array_get(zap_leaf_phys_t *l, zfs_endian_t endian, int blksft,
 
        while (bseen < array_len) {
                struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, blksft, chunk).l_array;
-               int toread = MIN(array_len - bseen, ZAP_LEAF_ARRAY_BYTES);
+               int toread = min(array_len - bseen, ZAP_LEAF_ARRAY_BYTES);
 
                if (chunk >= ZAP_LEAF_NUMCHUNKS(blksft))
                        /* Don't use errno because this error is to be ignored.  */
@@ -1071,6 +1059,7 @@ zap_lookup(dnode_end_t *zap_dnode, char *name, uint64_t *val,
        }
 
        printf("unknown ZAP type\n");
+       free(zapbuf);
        return ZFS_ERR_BAD_FS;
 }
 
@@ -1105,6 +1094,7 @@ zap_iterate(dnode_end_t *zap_dnode,
                return ret;
        }
        printf("unknown ZAP type\n");
+       free(zapbuf);
        return 0;
 }
 
@@ -1876,6 +1866,7 @@ zfs_mount(device_t dev)
 
        ubbest = malloc(sizeof(*ubbest));
        if (!ubbest) {
+               free(ub_array);
                zfs_unmount(data);
                return 0;
        }
@@ -1964,6 +1955,7 @@ zfs_mount(device_t dev)
        if (err) {
                printf("couldn't zio_read object directory\n");
                zfs_unmount(data);
+               free(osp);
                free(ubbest);
                return 0;
        }
@@ -2063,6 +2055,9 @@ zfs_open(struct zfs_file *file, const char *fsfilename)
 
                hdrsize = SA_HDR_SIZE(((sa_hdr_phys_t *) sahdrp));
                file->size = *(uint64_t *) ((char *) sahdrp + hdrsize + SA_SIZE_OFFSET);
+               if ((data->dnode.dn.dn_bonuslen == 0) &&
+                       (data->dnode.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR))
+                       free(sahdrp);
        } else {
                file->size = zfs_to_cpu64(((znode_phys_t *) DN_BONUS(&data->dnode.dn))->zp_size, data->dnode.endian);
        }
@@ -2115,7 +2110,8 @@ zfs_read(zfs_file_t file, char *buf, uint64_t len)
                /*
                 * Find requested blkid and the offset within that block.
                 */
-               uint64_t blkid = (file->offset + red) /  blksz;
+               uint64_t blkid = file->offset + red;
+               blkid = do_div(blkid, blksz);
                free(data->file_buf);
                data->file_buf = 0;
 
@@ -2128,7 +2124,7 @@ zfs_read(zfs_file_t file, char *buf, uint64_t len)
                data->file_start = blkid * blksz;
                data->file_end = data->file_start + blksz;
 
-               movesize = MIN(length, data->file_end - (int) file->offset - red);
+               movesize = min(length, data->file_end - (int)file->offset - red);
 
                memmove(buf, data->file_buf + file->offset + red
                                - data->file_start, movesize);