arm: configs: enable some touchscreen driver
[firefly-linux-kernel-4.4.55.git] / fs / hfs / btree.c
index 3ebc437736febb4e0ef37a3612ea6501c7eac59a..1ab19e660e6909c08ec5e4a68510b41b5c345d26 100644 (file)
@@ -46,11 +46,25 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
        case HFS_EXT_CNID:
                hfs_inode_read_fork(tree->inode, mdb->drXTExtRec, mdb->drXTFlSize,
                                    mdb->drXTFlSize, be32_to_cpu(mdb->drXTClpSiz));
+               if (HFS_I(tree->inode)->alloc_blocks >
+                                       HFS_I(tree->inode)->first_blocks) {
+                       pr_err("invalid btree extent records\n");
+                       unlock_new_inode(tree->inode);
+                       goto free_inode;
+               }
+
                tree->inode->i_mapping->a_ops = &hfs_btree_aops;
                break;
        case HFS_CAT_CNID:
                hfs_inode_read_fork(tree->inode, mdb->drCTExtRec, mdb->drCTFlSize,
                                    mdb->drCTFlSize, be32_to_cpu(mdb->drCTClpSiz));
+
+               if (!HFS_I(tree->inode)->first_blocks) {
+                       pr_err("invalid btree extent records (0 size)\n");
+                       unlock_new_inode(tree->inode);
+                       goto free_inode;
+               }
+
                tree->inode->i_mapping->a_ops = &hfs_btree_aops;
                break;
        default:
@@ -59,11 +73,6 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
        }
        unlock_new_inode(tree->inode);
 
-       if (!HFS_I(tree->inode)->first_blocks) {
-               printk(KERN_ERR "hfs: invalid btree extent records (0 size).\n");
-               goto free_inode;
-       }
-
        mapping = tree->inode->i_mapping;
        page = read_mapping_page(mapping, 0, NULL);
        if (IS_ERR(page))
@@ -90,15 +99,15 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
        switch (id) {
        case HFS_EXT_CNID:
                if (tree->max_key_len != HFS_MAX_EXT_KEYLEN) {
-                       printk(KERN_ERR "hfs: invalid extent max_key_len %d\n",
-                               tree->max_key_len);
+                       pr_err("invalid extent max_key_len %d\n",
+                              tree->max_key_len);
                        goto fail_page;
                }
                break;
        case HFS_CAT_CNID:
                if (tree->max_key_len != HFS_MAX_CAT_KEYLEN) {
-                       printk(KERN_ERR "hfs: invalid catalog max_key_len %d\n",
-                               tree->max_key_len);
+                       pr_err("invalid catalog max_key_len %d\n",
+                              tree->max_key_len);
                        goto fail_page;
                }
                break;
@@ -136,8 +145,9 @@ void hfs_btree_close(struct hfs_btree *tree)
                while ((node = tree->node_hash[i])) {
                        tree->node_hash[i] = node->next_hash;
                        if (atomic_read(&node->refcnt))
-                               printk(KERN_ERR "hfs: node %d:%d still has %d user(s)!\n",
-                                       node->tree->cnid, node->this, atomic_read(&node->refcnt));
+                               pr_err("node %d:%d still has %d user(s)!\n",
+                                      node->tree->cnid, node->this,
+                                      atomic_read(&node->refcnt));
                        hfs_bnode_free(node);
                        tree->node_hash_cnt--;
                }
@@ -280,7 +290,7 @@ struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *tree)
                kunmap(*pagep);
                nidx = node->next;
                if (!nidx) {
-                       printk(KERN_DEBUG "hfs: create new bmap node...\n");
+                       printk(KERN_DEBUG "create new bmap node...\n");
                        next_node = hfs_bmap_new_bmap(node, idx);
                } else
                        next_node = hfs_bnode_find(tree, nidx);
@@ -306,7 +316,7 @@ void hfs_bmap_free(struct hfs_bnode *node)
        u32 nidx;
        u8 *data, byte, m;
 
-       dprint(DBG_BNODE_MOD, "btree_free_node: %u\n", node->this);
+       hfs_dbg(BNODE_MOD, "btree_free_node: %u\n", node->this);
        tree = node->tree;
        nidx = node->this;
        node = hfs_bnode_find(tree, 0);
@@ -321,7 +331,8 @@ void hfs_bmap_free(struct hfs_bnode *node)
                hfs_bnode_put(node);
                if (!i) {
                        /* panic */;
-                       printk(KERN_CRIT "hfs: unable to free bnode %u. bmap not found!\n", node->this);
+                       pr_crit("unable to free bnode %u. bmap not found!\n",
+                               node->this);
                        return;
                }
                node = hfs_bnode_find(tree, i);
@@ -329,7 +340,8 @@ void hfs_bmap_free(struct hfs_bnode *node)
                        return;
                if (node->type != HFS_NODE_MAP) {
                        /* panic */;
-                       printk(KERN_CRIT "hfs: invalid bmap found! (%u,%d)\n", node->this, node->type);
+                       pr_crit("invalid bmap found! (%u,%d)\n",
+                               node->this, node->type);
                        hfs_bnode_put(node);
                        return;
                }
@@ -342,7 +354,8 @@ void hfs_bmap_free(struct hfs_bnode *node)
        m = 1 << (~nidx & 7);
        byte = data[off];
        if (!(byte & m)) {
-               printk(KERN_CRIT "hfs: trying to free free bnode %u(%d)\n", node->this, node->type);
+               pr_crit("trying to free free bnode %u(%d)\n",
+                       node->this, node->type);
                kunmap(page);
                hfs_bnode_put(node);
                return;