]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
hfs/hfsplus: rework debug output subsystem
authorViacheslav Dubeyko <slava@dubeyko.com>
Wed, 24 Sep 2025 23:24:41 +0000 (16:24 -0700)
committerViacheslav Dubeyko <slava@dubeyko.com>
Wed, 24 Sep 2025 23:30:34 +0000 (16:30 -0700)
Currently, HFS/HFS+ has very obsolete and inconvenient
debug output subsystem. Also, the code is duplicated
in HFS and HFS+ driver. This patch introduces
linux/hfs_common.h for gathering common declarations,
inline functions, and common short methods. Currently,
this file contains only hfs_dbg() function that
employs pr_debug() with the goal to print a debug-level
messages conditionally.

So, now, it is possible to enable the debug output
by means of:

echo 'file extent.c +p' > /proc/dynamic_debug/control
echo 'func hfsplus_evict_inode +p' > /proc/dynamic_debug/control

And debug output looks like this:

hfs: pid 5831:fs/hfs/catalog.c:228 hfs_cat_delete(): delete_cat: 00,48
hfs: pid 5831:fs/hfs/extent.c:484 hfs_file_truncate(): truncate: 48, 409600 -> 0
hfs: pid 5831:fs/hfs/extent.c:212 hfs_dump_extent():
hfs: pid 5831:fs/hfs/extent.c:214 hfs_dump_extent():  78:4
hfs: pid 5831:fs/hfs/extent.c:214 hfs_dump_extent():  0:0
hfs: pid 5831:fs/hfs/extent.c:214 hfs_dump_extent():  0:0

v4
Debug messages have been reworked and information about
new HFS/HFS+ shared declarations file has been added
to MAINTAINERS file.

v5
Yangtao Li suggested to clean up debug output and
fix several typos.

Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
cc: Yangtao Li <frank.li@vivo.com>
cc: linux-fsdevel@vger.kernel.org
cc: Johannes Thumshirn <Johannes.Thumshirn@wdc.com>
Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
22 files changed:
MAINTAINERS
fs/hfs/bfind.c
fs/hfs/bitmap.c
fs/hfs/bnode.c
fs/hfs/brec.c
fs/hfs/btree.c
fs/hfs/catalog.c
fs/hfs/extent.c
fs/hfs/hfs_fs.h
fs/hfs/inode.c
fs/hfsplus/attributes.c
fs/hfsplus/bfind.c
fs/hfsplus/bitmap.c
fs/hfsplus/bnode.c
fs/hfsplus/brec.c
fs/hfsplus/btree.c
fs/hfsplus/catalog.c
fs/hfsplus/extents.c
fs/hfsplus/hfsplus_fs.h
fs/hfsplus/super.c
fs/hfsplus/xattr.c
include/linux/hfs_common.h [new file with mode: 0644]

index f5e1540cb7024442f76477964b020cfc79694001..83579b15ba43ad16bb84addcba0fd50aab7573c8 100644 (file)
@@ -10794,6 +10794,7 @@ S:      Maintained
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/vdubeyko/hfs.git
 F:     Documentation/filesystems/hfs.rst
 F:     fs/hfs/
+F:     include/linux/hfs_common.h
 
 HFSPLUS FILESYSTEM
 M:     Viacheslav Dubeyko <slava@dubeyko.com>
@@ -10804,6 +10805,7 @@ S:      Maintained
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/vdubeyko/hfs.git
 F:     Documentation/filesystems/hfsplus.rst
 F:     fs/hfsplus/
+F:     include/linux/hfs_common.h
 
 HGA FRAMEBUFFER DRIVER
 M:     Ferenc Bakonyi <fero@drama.obuda.kando.hu>
index e46f650b5e9c26c983e9bdd18c79dd4271242e6c..c2f840c49e60b5a579168081efe28be09a58a3bb 100644 (file)
@@ -26,7 +26,7 @@ int hfs_find_init(struct hfs_btree *tree, struct hfs_find_data *fd)
                return -ENOMEM;
        fd->search_key = ptr;
        fd->key = ptr + tree->max_key_len + 2;
-       hfs_dbg(BNODE_REFS, "find_init: %d (%p)\n",
+       hfs_dbg("cnid %d, caller %ps\n",
                tree->cnid, __builtin_return_address(0));
        switch (tree->cnid) {
        case HFS_CAT_CNID:
@@ -48,7 +48,7 @@ void hfs_find_exit(struct hfs_find_data *fd)
 {
        hfs_bnode_put(fd->bnode);
        kfree(fd->search_key);
-       hfs_dbg(BNODE_REFS, "find_exit: %d (%p)\n",
+       hfs_dbg("cnid %d, caller %ps\n",
                fd->tree->cnid, __builtin_return_address(0));
        mutex_unlock(&fd->tree->tree_lock);
        fd->tree = NULL;
index 28307bc9ec1ee19a4c4e43eee848d99203049787..5e84833a4743adf15757a5945480bb036bb03149 100644 (file)
@@ -158,7 +158,7 @@ u32 hfs_vbm_search_free(struct super_block *sb, u32 goal, u32 *num_bits)
                }
        }
 
-       hfs_dbg(BITMAP, "alloc_bits: %u,%u\n", pos, *num_bits);
+       hfs_dbg("pos %u, num_bits %u\n", pos, *num_bits);
        HFS_SB(sb)->free_ablocks -= *num_bits;
        hfs_bitmap_dirty(sb);
 out:
@@ -200,7 +200,7 @@ int hfs_clear_vbm_bits(struct super_block *sb, u16 start, u16 count)
        if (!count)
                return 0;
 
-       hfs_dbg(BITMAP, "clear_bits: %u,%u\n", start, count);
+       hfs_dbg("start %u, count %u\n", start, count);
        /* are all of the bits in range? */
        if ((start + count) > HFS_SB(sb)->fs_ablocks)
                return -2;
index e8cd1a31f2470cfbf72589f08e8c59b5b6c21050..fcfffe75d84e707e204e1e854f0a56a46a44466e 100644 (file)
@@ -200,7 +200,7 @@ void hfs_bnode_copy(struct hfs_bnode *dst_node, int dst,
 {
        struct page *src_page, *dst_page;
 
-       hfs_dbg(BNODE_MOD, "copybytes: %u,%u,%u\n", dst, src, len);
+       hfs_dbg("dst %u, src %u, len %u\n", dst, src, len);
        if (!len)
                return;
 
@@ -221,7 +221,7 @@ void hfs_bnode_move(struct hfs_bnode *node, int dst, int src, int len)
        struct page *page;
        void *ptr;
 
-       hfs_dbg(BNODE_MOD, "movebytes: %u,%u,%u\n", dst, src, len);
+       hfs_dbg("dst %u, src %u, len %u\n", dst, src, len);
        if (!len)
                return;
 
@@ -243,16 +243,16 @@ void hfs_bnode_dump(struct hfs_bnode *node)
        __be32 cnid;
        int i, off, key_off;
 
-       hfs_dbg(BNODE_MOD, "bnode: %d\n", node->this);
+       hfs_dbg("node %d\n", node->this);
        hfs_bnode_read(node, &desc, 0, sizeof(desc));
-       hfs_dbg(BNODE_MOD, "%d, %d, %d, %d, %d\n",
+       hfs_dbg("next %d, prev %d, type %d, height %d, num_recs %d\n",
                be32_to_cpu(desc.next), be32_to_cpu(desc.prev),
                desc.type, desc.height, be16_to_cpu(desc.num_recs));
 
        off = node->tree->node_size - 2;
        for (i = be16_to_cpu(desc.num_recs); i >= 0; off -= 2, i--) {
                key_off = hfs_bnode_read_u16(node, off);
-               hfs_dbg_cont(BNODE_MOD, " %d", key_off);
+               hfs_dbg(" key_off %d", key_off);
                if (i && node->type == HFS_NODE_INDEX) {
                        int tmp;
 
@@ -260,18 +260,18 @@ void hfs_bnode_dump(struct hfs_bnode *node)
                                tmp = (hfs_bnode_read_u8(node, key_off) | 1) + 1;
                        else
                                tmp = node->tree->max_key_len + 1;
-                       hfs_dbg_cont(BNODE_MOD, " (%d,%d",
-                                    tmp, hfs_bnode_read_u8(node, key_off));
+                       hfs_dbg(" (%d,%d",
+                               tmp, hfs_bnode_read_u8(node, key_off));
                        hfs_bnode_read(node, &cnid, key_off + tmp, 4);
-                       hfs_dbg_cont(BNODE_MOD, ",%d)", be32_to_cpu(cnid));
+                       hfs_dbg(", cnid %d)", be32_to_cpu(cnid));
                } else if (i && node->type == HFS_NODE_LEAF) {
                        int tmp;
 
                        tmp = hfs_bnode_read_u8(node, key_off);
-                       hfs_dbg_cont(BNODE_MOD, " (%d)", tmp);
+                       hfs_dbg(" (%d)", tmp);
                }
        }
-       hfs_dbg_cont(BNODE_MOD, "\n");
+       hfs_dbg("\n");
 }
 
 void hfs_bnode_unlink(struct hfs_bnode *node)
@@ -361,7 +361,7 @@ static struct hfs_bnode *__hfs_bnode_create(struct hfs_btree *tree, u32 cnid)
        node->this = cnid;
        set_bit(HFS_BNODE_NEW, &node->flags);
        atomic_set(&node->refcnt, 1);
-       hfs_dbg(BNODE_REFS, "new_node(%d:%d): 1\n",
+       hfs_dbg("cnid %d, node %d, refcnt 1\n",
                node->tree->cnid, node->this);
        init_waitqueue_head(&node->lock_wq);
        spin_lock(&tree->hash_lock);
@@ -401,7 +401,7 @@ void hfs_bnode_unhash(struct hfs_bnode *node)
 {
        struct hfs_bnode **p;
 
-       hfs_dbg(BNODE_REFS, "remove_node(%d:%d): %d\n",
+       hfs_dbg("cnid %d, node %d, refcnt %d\n",
                node->tree->cnid, node->this, atomic_read(&node->refcnt));
        for (p = &node->tree->node_hash[hfs_bnode_hash(node->this)];
             *p && *p != node; p = &(*p)->next_hash)
@@ -546,7 +546,7 @@ void hfs_bnode_get(struct hfs_bnode *node)
 {
        if (node) {
                atomic_inc(&node->refcnt);
-               hfs_dbg(BNODE_REFS, "get_node(%d:%d): %d\n",
+               hfs_dbg("cnid %d, node %d, refcnt %d\n",
                        node->tree->cnid, node->this,
                        atomic_read(&node->refcnt));
        }
@@ -559,7 +559,7 @@ void hfs_bnode_put(struct hfs_bnode *node)
                struct hfs_btree *tree = node->tree;
                int i;
 
-               hfs_dbg(BNODE_REFS, "put_node(%d:%d): %d\n",
+               hfs_dbg("cnid %d, node %d, refcnt %d\n",
                        node->tree->cnid, node->this,
                        atomic_read(&node->refcnt));
                BUG_ON(!atomic_read(&node->refcnt));
index b01db1fae147cd6a70e62d58823d6546fd156bc5..e49a141c87e517bc63ccd8c93d46809c57d33fd9 100644 (file)
@@ -94,7 +94,7 @@ again:
        end_rec_off = tree->node_size - (node->num_recs + 1) * 2;
        end_off = hfs_bnode_read_u16(node, end_rec_off);
        end_rec_off -= 2;
-       hfs_dbg(BNODE_MOD, "insert_rec: %d, %d, %d, %d\n",
+       hfs_dbg("rec %d, size %d, end_off %d, end_rec_off %d\n",
                rec, size, end_off, end_rec_off);
        if (size > end_rec_off - end_off) {
                if (new_node)
@@ -192,7 +192,7 @@ again:
                mark_inode_dirty(tree->inode);
        }
        hfs_bnode_dump(node);
-       hfs_dbg(BNODE_MOD, "remove_rec: %d, %d\n",
+       hfs_dbg("rec %d, len %d\n",
                fd->record, fd->keylength + fd->entrylength);
        if (!--node->num_recs) {
                hfs_bnode_unlink(node);
@@ -261,7 +261,7 @@ static struct hfs_bnode *hfs_bnode_split(struct hfs_find_data *fd)
        if (IS_ERR(new_node))
                return new_node;
        hfs_bnode_get(node);
-       hfs_dbg(BNODE_MOD, "split_nodes: %d - %d - %d\n",
+       hfs_dbg("this %d, new %d, next %d\n",
                node->this, new_node->this, node->next);
        new_node->next = node->next;
        new_node->prev = node->this;
@@ -397,7 +397,7 @@ again:
                newkeylen = (hfs_bnode_read_u8(node, 14) | 1) + 1;
        else
                fd->keylength = newkeylen = tree->max_key_len + 1;
-       hfs_dbg(BNODE_MOD, "update_rec: %d, %d, %d\n",
+       hfs_dbg("rec %d, keylength %d, newkeylen %d\n",
                rec, fd->keylength, newkeylen);
 
        rec_off = tree->node_size - (rec + 2) * 2;
index e86e1e235658fab0bad1c9de8890f3ea68030970..22e62fe7448bf8fcec22dcbb1ffaf3e5d4d75f65 100644 (file)
@@ -364,7 +364,7 @@ void hfs_bmap_free(struct hfs_bnode *node)
        u32 nidx;
        u8 *data, byte, m;
 
-       hfs_dbg(BNODE_MOD, "btree_free_node: %u\n", node->this);
+       hfs_dbg("node %u\n", node->this);
        tree = node->tree;
        nidx = node->this;
        node = hfs_bnode_find(tree, 0);
index b6b18ee6813510cfded4d6142d2e38c8b295cb1d..caebabb6642f165f9e32ade2c84219cde939254d 100644 (file)
@@ -87,7 +87,7 @@ int hfs_cat_create(u32 cnid, struct inode *dir, const struct qstr *str, struct i
        int entry_size;
        int err;
 
-       hfs_dbg(CAT_MOD, "create_cat: %s,%u(%d)\n",
+       hfs_dbg("name %s, cnid %u, i_nlink %d\n",
                str->name, cnid, inode->i_nlink);
        if (dir->i_size >= HFS_MAX_VALENCE)
                return -ENOSPC;
@@ -238,7 +238,7 @@ int hfs_correct_next_unused_CNID(struct super_block *sb, u32 cnid)
        s64 leaf_tail;
        s64 node_id;
 
-       hfs_dbg(CAT_MOD, "correct next unused CNID: cnid %u, next_id %lld\n",
+       hfs_dbg("cnid %u, next_id %lld\n",
                cnid, atomic64_read(&HFS_SB(sb)->next_id));
 
        if ((cnid + 1) < atomic64_read(&HFS_SB(sb)->next_id)) {
@@ -274,7 +274,7 @@ int hfs_correct_next_unused_CNID(struct super_block *sb, u32 cnid)
                                return -ENOENT;
                }
 
-               hfs_dbg(CAT_MOD, "node_id %lld, leaf_tail %lld, leaf_head %lld\n",
+               hfs_dbg("node %lld, leaf_tail %lld, leaf_head %lld\n",
                        node_id, leaf_tail, leaf_head);
 
                hfs_bnode_dump(node);
@@ -309,13 +309,13 @@ int hfs_correct_next_unused_CNID(struct super_block *sb, u32 cnid)
 
                        if (rec.type == HFS_CDR_DIR) {
                                found_cnid = be32_to_cpu(rec.dir.DirID);
-                               hfs_dbg(CAT_MOD, "found_cnid %u\n", found_cnid);
+                               hfs_dbg("found_cnid %u\n", found_cnid);
                                hfs_set_next_unused_CNID(sb, cnid, found_cnid);
                                hfs_bnode_put(node);
                                return 0;
                        } else if (rec.type == HFS_CDR_FIL) {
                                found_cnid = be32_to_cpu(rec.file.FlNum);
-                               hfs_dbg(CAT_MOD, "found_cnid %u\n", found_cnid);
+                               hfs_dbg("found_cnid %u\n", found_cnid);
                                hfs_set_next_unused_CNID(sb, cnid, found_cnid);
                                hfs_bnode_put(node);
                                return 0;
@@ -343,7 +343,7 @@ int hfs_cat_delete(u32 cnid, struct inode *dir, const struct qstr *str)
        struct hfs_readdir_data *rd;
        int res, type;
 
-       hfs_dbg(CAT_MOD, "delete_cat: %s,%u\n", str ? str->name : NULL, cnid);
+       hfs_dbg("name %s, cnid %u\n", str ? str->name : NULL, cnid);
        sb = dir->i_sb;
        res = hfs_find_init(HFS_SB(sb)->cat_tree, &fd);
        if (res)
@@ -417,7 +417,7 @@ int hfs_cat_move(u32 cnid, struct inode *src_dir, const struct qstr *src_name,
        int entry_size, type;
        int err;
 
-       hfs_dbg(CAT_MOD, "rename_cat: %u - %lu,%s - %lu,%s\n",
+       hfs_dbg("cnid %u - (ino %lu, name %s) - (ino %lu, name %s)\n",
                cnid, src_dir->i_ino, src_name->name,
                dst_dir->i_ino, dst_name->name);
        sb = src_dir->i_sb;
index 580c62981dbd3d994a3c7b1413659b0a79bffe2b..a097908b269d0ad1575847dd01d6d4a4538262bf 100644 (file)
@@ -209,12 +209,12 @@ static void hfs_dump_extent(struct hfs_extent *extent)
 {
        int i;
 
-       hfs_dbg(EXTENT, "   ");
+       hfs_dbg("extent:   ");
        for (i = 0; i < 3; i++)
-               hfs_dbg_cont(EXTENT, " %u:%u",
-                            be16_to_cpu(extent[i].block),
-                            be16_to_cpu(extent[i].count));
-       hfs_dbg_cont(EXTENT, "\n");
+               hfs_dbg(" block %u, count %u",
+                       be16_to_cpu(extent[i].block),
+                       be16_to_cpu(extent[i].count));
+       hfs_dbg("\n");
 }
 
 static int hfs_add_extent(struct hfs_extent *extent, u16 offset,
@@ -411,10 +411,11 @@ int hfs_extend_file(struct inode *inode)
                goto out;
        }
 
-       hfs_dbg(EXTENT, "extend %lu: %u,%u\n", inode->i_ino, start, len);
+       hfs_dbg("ino %lu, start %u, len %u\n", inode->i_ino, start, len);
        if (HFS_I(inode)->alloc_blocks == HFS_I(inode)->first_blocks) {
                if (!HFS_I(inode)->first_blocks) {
-                       hfs_dbg(EXTENT, "first extents\n");
+                       hfs_dbg("first_extent: start %u, len %u\n",
+                               start, len);
                        /* no extents yet */
                        HFS_I(inode)->first_extents[0].block = cpu_to_be16(start);
                        HFS_I(inode)->first_extents[0].count = cpu_to_be16(len);
@@ -456,7 +457,7 @@ out:
        return res;
 
 insert_extent:
-       hfs_dbg(EXTENT, "insert new extent\n");
+       hfs_dbg("insert new extent\n");
        res = hfs_ext_write_extent(inode);
        if (res)
                goto out;
@@ -481,7 +482,7 @@ void hfs_file_truncate(struct inode *inode)
        u32 size;
        int res;
 
-       hfs_dbg(INODE, "truncate: %lu, %Lu -> %Lu\n",
+       hfs_dbg("ino %lu, phys_size %llu -> i_size %llu\n",
                inode->i_ino, (long long)HFS_I(inode)->phys_size,
                inode->i_size);
        if (inode->i_size > HFS_I(inode)->phys_size) {
index c732a066de787be8e54ae582035205618680d1e1..fff149af89da311ea521ca7e689afbda9fbfccae 100644 (file)
@@ -9,12 +9,6 @@
 #ifndef _LINUX_HFS_FS_H
 #define _LINUX_HFS_FS_H
 
-#ifdef pr_fmt
-#undef pr_fmt
-#endif
-
-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/mutex.h>
 
 #include <asm/byteorder.h>
 #include <linux/uaccess.h>
+#include <linux/hfs_common.h>
 
 #include "hfs.h"
 
-#define DBG_BNODE_REFS 0x00000001
-#define DBG_BNODE_MOD  0x00000002
-#define DBG_CAT_MOD    0x00000004
-#define DBG_INODE      0x00000008
-#define DBG_SUPER      0x00000010
-#define DBG_EXTENT     0x00000020
-#define DBG_BITMAP     0x00000040
-
-//#define DBG_MASK     (DBG_EXTENT|DBG_INODE|DBG_BNODE_MOD|DBG_CAT_MOD|DBG_BITMAP)
-//#define DBG_MASK     (DBG_BNODE_MOD|DBG_CAT_MOD|DBG_INODE)
-//#define DBG_MASK     (DBG_CAT_MOD|DBG_BNODE_REFS|DBG_INODE|DBG_EXTENT)
-#define DBG_MASK       (0)
-
-#define hfs_dbg(flg, fmt, ...)                                 \
-do {                                                           \
-       if (DBG_##flg & DBG_MASK)                               \
-               printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__);  \
-} while (0)
-
-#define hfs_dbg_cont(flg, fmt, ...)                            \
-do {                                                           \
-       if (DBG_##flg & DBG_MASK)                               \
-               pr_cont(fmt, ##__VA_ARGS__);                    \
-} while (0)
-
-
 /*
  * struct hfs_inode_info
  *
index 490b6ad5d9817a779fae95e61dd4491ad7f5129c..9cd449913dc82a244d7191b6cf35c21b689c6d49 100644 (file)
@@ -249,7 +249,7 @@ void hfs_delete_inode(struct inode *inode)
 {
        struct super_block *sb = inode->i_sb;
 
-       hfs_dbg(INODE, "delete_inode: %lu\n", inode->i_ino);
+       hfs_dbg("ino %lu\n", inode->i_ino);
        if (S_ISDIR(inode->i_mode)) {
                BUG_ON(atomic64_read(&HFS_SB(sb)->folder_count) > U32_MAX);
                atomic64_dec(&HFS_SB(sb)->folder_count);
@@ -436,7 +436,7 @@ int hfs_write_inode(struct inode *inode, struct writeback_control *wbc)
        hfs_cat_rec rec;
        int res;
 
-       hfs_dbg(INODE, "hfs_write_inode: %lu\n", inode->i_ino);
+       hfs_dbg("ino %lu\n", inode->i_ino);
        res = hfs_ext_write_extent(inode);
        if (res)
                return res;
index eeebe80c6be4aa39878bee63521d2558d9a189da..ba26980cc5035ccf41698e3384388f42e44f393e 100644 (file)
@@ -139,7 +139,7 @@ int hfsplus_find_attr(struct super_block *sb, u32 cnid,
 {
        int err = 0;
 
-       hfs_dbg(ATTR_MOD, "find_attr: %s,%d\n", name ? name : NULL, cnid);
+       hfs_dbg("name %s, cnid %d\n", name ? name : NULL, cnid);
 
        if (!HFSPLUS_SB(sb)->attr_tree) {
                pr_err("attributes file doesn't exist\n");
@@ -201,7 +201,7 @@ int hfsplus_create_attr(struct inode *inode,
        int entry_size;
        int err;
 
-       hfs_dbg(ATTR_MOD, "create_attr: %s,%ld\n",
+       hfs_dbg("name %s, ino %ld\n",
                name ? name : NULL, inode->i_ino);
 
        if (!HFSPLUS_SB(sb)->attr_tree) {
@@ -310,7 +310,7 @@ int hfsplus_delete_attr(struct inode *inode, const char *name)
        struct super_block *sb = inode->i_sb;
        struct hfs_find_data fd;
 
-       hfs_dbg(ATTR_MOD, "delete_attr: %s,%ld\n",
+       hfs_dbg("name %s, ino %ld\n",
                name ? name : NULL, inode->i_ino);
 
        if (!HFSPLUS_SB(sb)->attr_tree) {
@@ -356,7 +356,7 @@ int hfsplus_delete_all_attrs(struct inode *dir, u32 cnid)
        int err = 0;
        struct hfs_find_data fd;
 
-       hfs_dbg(ATTR_MOD, "delete_all_attrs: %d\n", cnid);
+       hfs_dbg("cnid %d\n", cnid);
 
        if (!HFSPLUS_SB(dir->i_sb)->attr_tree) {
                pr_err("attributes file doesn't exist\n");
index 26ebac4c6042429baa2a296b0676ad69cf27194e..afc9c89e8c6aff2e1b2a712925e2c87db7e17faf 100644 (file)
@@ -23,7 +23,7 @@ int hfs_find_init(struct hfs_btree *tree, struct hfs_find_data *fd)
                return -ENOMEM;
        fd->search_key = ptr;
        fd->key = ptr + tree->max_key_len + 2;
-       hfs_dbg(BNODE_REFS, "find_init: %d (%p)\n",
+       hfs_dbg("cnid %d, caller %ps\n",
                tree->cnid, __builtin_return_address(0));
        mutex_lock_nested(&tree->tree_lock,
                        hfsplus_btree_lock_class(tree));
@@ -34,7 +34,7 @@ void hfs_find_exit(struct hfs_find_data *fd)
 {
        hfs_bnode_put(fd->bnode);
        kfree(fd->search_key);
-       hfs_dbg(BNODE_REFS, "find_exit: %d (%p)\n",
+       hfs_dbg("cnid %d, caller %ps\n",
                fd->tree->cnid, __builtin_return_address(0));
        mutex_unlock(&fd->tree->tree_lock);
        fd->tree = NULL;
index bd8dcea8558800e0362d3f4b5bcad0ba60dca67d..1b3af8c87cadb544ad0dfbe6726cb8991d935a51 100644 (file)
@@ -31,7 +31,7 @@ int hfsplus_block_allocate(struct super_block *sb, u32 size,
        if (!len)
                return size;
 
-       hfs_dbg(BITMAP, "block_allocate: %u,%u,%u\n", size, offset, len);
+       hfs_dbg("size %u, offset %u, len %u\n", size, offset, len);
        mutex_lock(&sbi->alloc_mutex);
        mapping = sbi->alloc_file->i_mapping;
        page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS, NULL);
@@ -90,14 +90,14 @@ int hfsplus_block_allocate(struct super_block *sb, u32 size,
                else
                        end = pptr + ((size + 31) & (PAGE_CACHE_BITS - 1)) / 32;
        }
-       hfs_dbg(BITMAP, "bitmap full\n");
+       hfs_dbg("bitmap full\n");
        start = size;
        goto out;
 
 found:
        start = offset + (curr - pptr) * 32 + i;
        if (start >= size) {
-               hfs_dbg(BITMAP, "bitmap full\n");
+               hfs_dbg("bitmap full\n");
                goto out;
        }
        /* do any partial u32 at the start */
@@ -155,7 +155,7 @@ done:
        *max = offset + (curr - pptr) * 32 + i - start;
        sbi->free_blocks -= *max;
        hfsplus_mark_mdb_dirty(sb);
-       hfs_dbg(BITMAP, "-> %u,%u\n", start, *max);
+       hfs_dbg("start %u, max %u\n", start, *max);
 out:
        mutex_unlock(&sbi->alloc_mutex);
        return start;
@@ -174,7 +174,7 @@ int hfsplus_block_free(struct super_block *sb, u32 offset, u32 count)
        if (!count)
                return 0;
 
-       hfs_dbg(BITMAP, "block_free: %u,%u\n", offset, count);
+       hfs_dbg("offset %u, count %u\n", offset, count);
        /* are all of the bits in range? */
        if ((offset + count) > sbi->total_blocks)
                return -ENOENT;
index 407d5152eb411ed6268814d738b224d1454a4bfc..63e652ad1e0def02ad0eb424c6447a69f40d4b34 100644 (file)
@@ -173,7 +173,7 @@ void hfs_bnode_copy(struct hfs_bnode *dst_node, int dst,
        struct page **src_page, **dst_page;
        int l;
 
-       hfs_dbg(BNODE_MOD, "copybytes: %u,%u,%u\n", dst, src, len);
+       hfs_dbg("dst %u, src %u, len %u\n", dst, src, len);
        if (!len)
                return;
 
@@ -231,7 +231,7 @@ void hfs_bnode_move(struct hfs_bnode *node, int dst, int src, int len)
        void *src_ptr, *dst_ptr;
        int l;
 
-       hfs_dbg(BNODE_MOD, "movebytes: %u,%u,%u\n", dst, src, len);
+       hfs_dbg("dst %u, src %u, len %u\n", dst, src, len);
        if (!len)
                return;
 
@@ -351,16 +351,16 @@ void hfs_bnode_dump(struct hfs_bnode *node)
        __be32 cnid;
        int i, off, key_off;
 
-       hfs_dbg(BNODE_MOD, "bnode: %d\n", node->this);
+       hfs_dbg("node %d\n", node->this);
        hfs_bnode_read(node, &desc, 0, sizeof(desc));
-       hfs_dbg(BNODE_MOD, "%d, %d, %d, %d, %d\n",
+       hfs_dbg("next %d, prev %d, type %d, height %d, num_recs %d\n",
                be32_to_cpu(desc.next), be32_to_cpu(desc.prev),
                desc.type, desc.height, be16_to_cpu(desc.num_recs));
 
        off = node->tree->node_size - 2;
        for (i = be16_to_cpu(desc.num_recs); i >= 0; off -= 2, i--) {
                key_off = hfs_bnode_read_u16(node, off);
-               hfs_dbg(BNODE_MOD, " %d", key_off);
+               hfs_dbg(" key_off %d", key_off);
                if (i && node->type == HFS_NODE_INDEX) {
                        int tmp;
 
@@ -369,17 +369,17 @@ void hfs_bnode_dump(struct hfs_bnode *node)
                                tmp = hfs_bnode_read_u16(node, key_off) + 2;
                        else
                                tmp = node->tree->max_key_len + 2;
-                       hfs_dbg_cont(BNODE_MOD, " (%d", tmp);
+                       hfs_dbg(" (%d", tmp);
                        hfs_bnode_read(node, &cnid, key_off + tmp, 4);
-                       hfs_dbg_cont(BNODE_MOD, ",%d)", be32_to_cpu(cnid));
+                       hfs_dbg(", cnid %d)", be32_to_cpu(cnid));
                } else if (i && node->type == HFS_NODE_LEAF) {
                        int tmp;
 
                        tmp = hfs_bnode_read_u16(node, key_off);
-                       hfs_dbg_cont(BNODE_MOD, " (%d)", tmp);
+                       hfs_dbg(" (%d)", tmp);
                }
        }
-       hfs_dbg_cont(BNODE_MOD, "\n");
+       hfs_dbg("\n");
 }
 
 void hfs_bnode_unlink(struct hfs_bnode *node)
@@ -415,7 +415,7 @@ void hfs_bnode_unlink(struct hfs_bnode *node)
 
        /* move down? */
        if (!node->prev && !node->next)
-               hfs_dbg(BNODE_MOD, "hfs_btree_del_level\n");
+               hfs_dbg("btree delete level\n");
        if (!node->parent) {
                tree->root = 0;
                tree->depth = 0;
@@ -470,7 +470,7 @@ static struct hfs_bnode *__hfs_bnode_create(struct hfs_btree *tree, u32 cnid)
        node->this = cnid;
        set_bit(HFS_BNODE_NEW, &node->flags);
        atomic_set(&node->refcnt, 1);
-       hfs_dbg(BNODE_REFS, "new_node(%d:%d): 1\n",
+       hfs_dbg("cnid %d, node %d, refcnt 1\n",
                node->tree->cnid, node->this);
        init_waitqueue_head(&node->lock_wq);
        spin_lock(&tree->hash_lock);
@@ -510,7 +510,7 @@ void hfs_bnode_unhash(struct hfs_bnode *node)
 {
        struct hfs_bnode **p;
 
-       hfs_dbg(BNODE_REFS, "remove_node(%d:%d): %d\n",
+       hfs_dbg("cnid %d, node %d, refcnt %d\n",
                node->tree->cnid, node->this, atomic_read(&node->refcnt));
        for (p = &node->tree->node_hash[hfs_bnode_hash(node->this)];
             *p && *p != node; p = &(*p)->next_hash)
@@ -656,7 +656,7 @@ void hfs_bnode_get(struct hfs_bnode *node)
 {
        if (node) {
                atomic_inc(&node->refcnt);
-               hfs_dbg(BNODE_REFS, "get_node(%d:%d): %d\n",
+               hfs_dbg("cnid %d, node %d, refcnt %d\n",
                        node->tree->cnid, node->this,
                        atomic_read(&node->refcnt));
        }
@@ -669,7 +669,7 @@ void hfs_bnode_put(struct hfs_bnode *node)
                struct hfs_btree *tree = node->tree;
                int i;
 
-               hfs_dbg(BNODE_REFS, "put_node(%d:%d): %d\n",
+               hfs_dbg("cnid %d, node %d, refcnt %d\n",
                        node->tree->cnid, node->this,
                        atomic_read(&node->refcnt));
                BUG_ON(!atomic_read(&node->refcnt));
index 1918544a78716e7a0949ecdacb51a6e7822d7b0f..b4645102feecd471c69937e754405a17b92a0768 100644 (file)
@@ -92,7 +92,7 @@ again:
        end_rec_off = tree->node_size - (node->num_recs + 1) * 2;
        end_off = hfs_bnode_read_u16(node, end_rec_off);
        end_rec_off -= 2;
-       hfs_dbg(BNODE_MOD, "insert_rec: %d, %d, %d, %d\n",
+       hfs_dbg("rec %d, size %d, end_off %d, end_rec_off %d\n",
                rec, size, end_off, end_rec_off);
        if (size > end_rec_off - end_off) {
                if (new_node)
@@ -193,7 +193,7 @@ again:
                mark_inode_dirty(tree->inode);
        }
        hfs_bnode_dump(node);
-       hfs_dbg(BNODE_MOD, "remove_rec: %d, %d\n",
+       hfs_dbg("rec %d, len %d\n",
                fd->record, fd->keylength + fd->entrylength);
        if (!--node->num_recs) {
                hfs_bnode_unlink(node);
@@ -246,7 +246,7 @@ static struct hfs_bnode *hfs_bnode_split(struct hfs_find_data *fd)
        if (IS_ERR(new_node))
                return new_node;
        hfs_bnode_get(node);
-       hfs_dbg(BNODE_MOD, "split_nodes: %d - %d - %d\n",
+       hfs_dbg("this %d - new %d - next %d\n",
                node->this, new_node->this, node->next);
        new_node->next = node->next;
        new_node->prev = node->this;
@@ -383,7 +383,7 @@ again:
                newkeylen = hfs_bnode_read_u16(node, 14) + 2;
        else
                fd->keylength = newkeylen = tree->max_key_len + 2;
-       hfs_dbg(BNODE_MOD, "update_rec: %d, %d, %d\n",
+       hfs_dbg("rec %d, keylength %d, newkeylen %d\n",
                rec, fd->keylength, newkeylen);
 
        rec_off = tree->node_size - (rec + 2) * 2;
@@ -395,7 +395,7 @@ again:
                end_off = hfs_bnode_read_u16(parent, end_rec_off);
                if (end_rec_off - end_off < diff) {
 
-                       hfs_dbg(BNODE_MOD, "splitting index node\n");
+                       hfs_dbg("splitting index node\n");
                        fd->bnode = parent;
                        new_node = hfs_bnode_split(fd);
                        if (IS_ERR(new_node))
index fe6a54c4083c34f8a8fd13099616661bbb098c09..7cc5aea145720c567fd22ae318c34a38146360da 100644 (file)
@@ -434,7 +434,7 @@ struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *tree)
                kunmap_local(data);
                nidx = node->next;
                if (!nidx) {
-                       hfs_dbg(BNODE_MOD, "create new bmap node\n");
+                       hfs_dbg("create new bmap node\n");
                        next_node = hfs_bmap_new_bmap(node, idx);
                } else
                        next_node = hfs_bnode_find(tree, nidx);
@@ -460,7 +460,7 @@ void hfs_bmap_free(struct hfs_bnode *node)
        u32 nidx;
        u8 *data, byte, m;
 
-       hfs_dbg(BNODE_MOD, "btree_free_node: %u\n", node->this);
+       hfs_dbg("node %u\n", node->this);
        BUG_ON(!node->this);
        tree = node->tree;
        nidx = node->this;
index 1995bafee839017cd4b86010ed9e671944982ce9..02c1eee4a4b86059ceaab7a7c68ab65adba6fa26 100644 (file)
@@ -259,7 +259,7 @@ int hfsplus_create_cat(u32 cnid, struct inode *dir,
        int entry_size;
        int err;
 
-       hfs_dbg(CAT_MOD, "create_cat: %s,%u(%d)\n",
+       hfs_dbg("name %s, cnid %u, i_nlink %d\n",
                str->name, cnid, inode->i_nlink);
        err = hfs_find_init(HFSPLUS_SB(sb)->cat_tree, &fd);
        if (err)
@@ -336,7 +336,7 @@ int hfsplus_delete_cat(u32 cnid, struct inode *dir, const struct qstr *str)
        int err, off;
        u16 type;
 
-       hfs_dbg(CAT_MOD, "delete_cat: %s,%u\n", str ? str->name : NULL, cnid);
+       hfs_dbg("name %s, cnid %u\n", str ? str->name : NULL, cnid);
        err = hfs_find_init(HFSPLUS_SB(sb)->cat_tree, &fd);
        if (err)
                return err;
@@ -441,7 +441,7 @@ int hfsplus_rename_cat(u32 cnid,
        int entry_size, type;
        int err;
 
-       hfs_dbg(CAT_MOD, "rename_cat: %u - %lu,%s - %lu,%s\n",
+       hfs_dbg("cnid %u - ino %lu, name %s - ino %lu, name %s\n",
                cnid, src_dir->i_ino, src_name->name,
                dst_dir->i_ino, dst_name->name);
        err = hfs_find_init(HFSPLUS_SB(sb)->cat_tree, &src_fd);
index b1699b3c246ae4789be1d7dbc62eb3b8ee6712fa..8e886514d27f1e5d4d94be75142f197669e62234 100644 (file)
@@ -275,7 +275,7 @@ int hfsplus_get_block(struct inode *inode, sector_t iblock,
        mutex_unlock(&hip->extents_lock);
 
 done:
-       hfs_dbg(EXTENT, "get_block(%lu): %llu - %u\n",
+       hfs_dbg("ino %lu, iblock %llu - dblock %u\n",
                inode->i_ino, (long long)iblock, dblock);
 
        mask = (1 << sbi->fs_shift) - 1;
@@ -298,12 +298,12 @@ static void hfsplus_dump_extent(struct hfsplus_extent *extent)
 {
        int i;
 
-       hfs_dbg(EXTENT, "   ");
+       hfs_dbg("extent   ");
        for (i = 0; i < 8; i++)
-               hfs_dbg_cont(EXTENT, " %u:%u",
-                            be32_to_cpu(extent[i].start_block),
-                            be32_to_cpu(extent[i].block_count));
-       hfs_dbg_cont(EXTENT, "\n");
+               hfs_dbg(" start_block %u, block_count %u",
+                       be32_to_cpu(extent[i].start_block),
+                       be32_to_cpu(extent[i].block_count));
+       hfs_dbg("\n");
 }
 
 static int hfsplus_add_extent(struct hfsplus_extent *extent, u32 offset,
@@ -359,8 +359,7 @@ found:
                if (count <= block_nr) {
                        err = hfsplus_block_free(sb, start, count);
                        if (err) {
-                               pr_err("can't free extent\n");
-                               hfs_dbg(EXTENT, " start: %u count: %u\n",
+                               pr_err("can't free extent: start %u, count %u\n",
                                        start, count);
                        }
                        extent->block_count = 0;
@@ -370,8 +369,7 @@ found:
                        count -= block_nr;
                        err = hfsplus_block_free(sb, start + count, block_nr);
                        if (err) {
-                               pr_err("can't free extent\n");
-                               hfs_dbg(EXTENT, " start: %u count: %u\n",
+                               pr_err("can't free extent: start %u, count %u\n",
                                        start, count);
                        }
                        extent->block_count = cpu_to_be32(count);
@@ -478,11 +476,12 @@ int hfsplus_file_extend(struct inode *inode, bool zeroout)
                        goto out;
        }
 
-       hfs_dbg(EXTENT, "extend %lu: %u,%u\n", inode->i_ino, start, len);
+       hfs_dbg("ino %lu, start %u, len %u\n", inode->i_ino, start, len);
 
        if (hip->alloc_blocks <= hip->first_blocks) {
                if (!hip->first_blocks) {
-                       hfs_dbg(EXTENT, "first extents\n");
+                       hfs_dbg("first_extent: start %u, len %u\n",
+                               start, len);
                        /* no extents yet */
                        hip->first_extents[0].start_block = cpu_to_be32(start);
                        hip->first_extents[0].block_count = cpu_to_be32(len);
@@ -521,7 +520,7 @@ out:
        return res;
 
 insert_extent:
-       hfs_dbg(EXTENT, "insert new extent\n");
+       hfs_dbg("insert new extent\n");
        res = hfsplus_ext_write_extent_locked(inode);
        if (res)
                goto out;
@@ -546,7 +545,7 @@ void hfsplus_file_truncate(struct inode *inode)
        u32 alloc_cnt, blk_cnt, start;
        int res;
 
-       hfs_dbg(INODE, "truncate: %lu, %llu -> %llu\n",
+       hfs_dbg("ino %lu, phys_size %llu -> i_size %llu\n",
                inode->i_ino, (long long)hip->phys_size, inode->i_size);
 
        if (inode->i_size > hip->phys_size) {
index 9dd18de0bc891b4263459a59dc8a42a91b535e81..89e8b19c127b0a5388d8921d253156cd4fd526ed 100644 (file)
 #ifndef _LINUX_HFSPLUS_FS_H
 #define _LINUX_HFSPLUS_FS_H
 
-#ifdef pr_fmt
-#undef pr_fmt
-#endif
-
-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-
 #include <linux/fs.h>
 #include <linux/mutex.h>
 #include <linux/buffer_head.h>
 #include <linux/blkdev.h>
 #include <linux/fs_context.h>
+#include <linux/hfs_common.h>
 #include "hfsplus_raw.h"
 
-#define DBG_BNODE_REFS 0x00000001
-#define DBG_BNODE_MOD  0x00000002
-#define DBG_CAT_MOD    0x00000004
-#define DBG_INODE      0x00000008
-#define DBG_SUPER      0x00000010
-#define DBG_EXTENT     0x00000020
-#define DBG_BITMAP     0x00000040
-#define DBG_ATTR_MOD   0x00000080
-
-#if 0
-#define DBG_MASK       (DBG_EXTENT|DBG_INODE|DBG_BNODE_MOD)
-#define DBG_MASK       (DBG_BNODE_MOD|DBG_CAT_MOD|DBG_INODE)
-#define DBG_MASK       (DBG_CAT_MOD|DBG_BNODE_REFS|DBG_INODE|DBG_EXTENT)
-#endif
-#define DBG_MASK       (0)
-
-#define hfs_dbg(flg, fmt, ...)                                 \
-do {                                                           \
-       if (DBG_##flg & DBG_MASK)                               \
-               printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__);  \
-} while (0)
-
-#define hfs_dbg_cont(flg, fmt, ...)                            \
-do {                                                           \
-       if (DBG_##flg & DBG_MASK)                               \
-               pr_cont(fmt, ##__VA_ARGS__);                    \
-} while (0)
-
 /* Runtime config options */
 #define HFSPLUS_DEF_CR_TYPE    0x3F3F3F3F  /* '????' */
 
index 77ec048021a01cc6dbe3a695afd77d7f7a7ebeac..16bc4abc67e08febcb71a774d9c0aa192699f2de 100644 (file)
@@ -163,7 +163,7 @@ static int hfsplus_write_inode(struct inode *inode,
 {
        int err;
 
-       hfs_dbg(INODE, "hfsplus_write_inode: %lu\n", inode->i_ino);
+       hfs_dbg("ino %lu\n", inode->i_ino);
 
        err = hfsplus_ext_write_extent(inode);
        if (err)
@@ -178,7 +178,7 @@ static int hfsplus_write_inode(struct inode *inode,
 
 static void hfsplus_evict_inode(struct inode *inode)
 {
-       hfs_dbg(INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino);
+       hfs_dbg("ino %lu\n", inode->i_ino);
        truncate_inode_pages_final(&inode->i_data);
        clear_inode(inode);
        if (HFSPLUS_IS_RSRC(inode)) {
@@ -197,7 +197,7 @@ static int hfsplus_sync_fs(struct super_block *sb, int wait)
        if (!wait)
                return 0;
 
-       hfs_dbg(SUPER, "hfsplus_sync_fs\n");
+       hfs_dbg("starting...\n");
 
        /*
         * Explicitly write out the special metadata inodes.
@@ -228,6 +228,10 @@ static int hfsplus_sync_fs(struct super_block *sb, int wait)
        vhdr->folder_count = cpu_to_be32(sbi->folder_count);
        vhdr->file_count = cpu_to_be32(sbi->file_count);
 
+       hfs_dbg("free_blocks %u, next_cnid %u, folder_count %u, file_count %u\n",
+               sbi->free_blocks, sbi->next_cnid,
+               sbi->folder_count, sbi->file_count);
+
        if (test_and_clear_bit(HFSPLUS_SB_WRITEBACKUP, &sbi->flags)) {
                memcpy(sbi->s_backup_vhdr, sbi->s_vhdr, sizeof(*sbi->s_vhdr));
                write_backup = 1;
@@ -253,6 +257,8 @@ out:
        if (!test_bit(HFSPLUS_SB_NOBARRIER, &sbi->flags))
                blkdev_issue_flush(sb->s_bdev);
 
+       hfs_dbg("finished: err %d\n", error);
+
        return error;
 }
 
@@ -301,7 +307,7 @@ static void hfsplus_put_super(struct super_block *sb)
 {
        struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb);
 
-       hfs_dbg(SUPER, "hfsplus_put_super\n");
+       hfs_dbg("starting...\n");
 
        cancel_delayed_work_sync(&sbi->sync_work);
 
@@ -323,6 +329,8 @@ static void hfsplus_put_super(struct super_block *sb)
        kfree(sbi->s_vhdr_buf);
        kfree(sbi->s_backup_vhdr_buf);
        call_rcu(&sbi->rcu, delayed_free);
+
+       hfs_dbg("finished\n");
 }
 
 static int hfsplus_statfs(struct dentry *dentry, struct kstatfs *buf)
index c951fa9835aa12e5c6d344838a929236c0a3df62..ece4d29c0ab9c2fcb3229d9f2b01e0f207d46dfb 100644 (file)
@@ -64,7 +64,7 @@ static void hfsplus_init_header_node(struct inode *attr_file,
        u32 used_bmp_bytes;
        u64 tmp;
 
-       hfs_dbg(ATTR_MOD, "init_hdr_attr_file: clump %u, node_size %u\n",
+       hfs_dbg("clump %u, node_size %u\n",
                clump_size, node_size);
 
        /* The end of the node contains list of record offsets */
@@ -132,7 +132,7 @@ static int hfsplus_create_attributes_file(struct super_block *sb)
        struct page *page;
        int old_state = HFSPLUS_EMPTY_ATTR_TREE;
 
-       hfs_dbg(ATTR_MOD, "create_attr_file: ino %d\n", HFSPLUS_ATTR_CNID);
+       hfs_dbg("ino %d\n", HFSPLUS_ATTR_CNID);
 
 check_attr_tree_state_again:
        switch (atomic_read(&sbi->attr_tree_state)) {
diff --git a/include/linux/hfs_common.h b/include/linux/hfs_common.h
new file mode 100644 (file)
index 0000000..8838ca2
--- /dev/null
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * HFS/HFS+ common definitions, inline functions,
+ * and shared functionality.
+ */
+
+#ifndef _HFS_COMMON_H_
+#define _HFS_COMMON_H_
+
+#ifdef pr_fmt
+#undef pr_fmt
+#endif
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#define hfs_dbg(fmt, ...)                                                      \
+       pr_debug("pid %d:%s:%d %s(): " fmt,                                     \
+                current->pid, __FILE__, __LINE__, __func__, ##__VA_ARGS__)     \
+
+#endif /* _HFS_COMMON_H_ */