xfs
[Top] [All Lists]

duplicate code in dir2

To: xfs-oss <xfs@xxxxxxxxxxx>
Subject: duplicate code in dir2
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Wed, 22 Jun 2011 10:24:02 -0500
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10
I was poking around with various code metrics, and found a fair bit of 
duplication in dir2 code (using "duplo").

Haven't really thought about how it might be factorable, but thought it might 
be interesting to share.

-Eric

/src/git/linux-2.6/fs/xfs/xfs_dir2_node.c(251)
/src/git/linux-2.6/fs/xfs/xfs_dir2_leaf.c(440)
                if (index < be16_to_cpu(leaf->hdr.count))
                        memmove(lep + 1, lep,
                                (be16_to_cpu(leaf->hdr.count) - index) * 
sizeof(*lep));
                lfloglow = index;
                lfloghigh = be16_to_cpu(leaf->hdr.count);
                be16_add_cpu(&leaf->hdr.count, 1);
        else {
                if (compact == 0) {
                        for (lowstale = index - 1;
                             lowstale >= 0 &&
                                be32_to_cpu(leaf->ents[lowstale].address) !=
                                XFS_DIR2_NULL_DATAPTR;
                             lowstale--)
                                continue;
                        for (highstale = index;
                             highstale < be16_to_cpu(leaf->hdr.count) &&
                                be32_to_cpu(leaf->ents[highstale].address) !=
                                XFS_DIR2_NULL_DATAPTR &&
                                (lowstale < 0 ||
                                 index - lowstale - 1 >= highstale - index);
                             highstale++)
                                continue;
                if (lowstale >= 0 &&
                    (highstale == be16_to_cpu(leaf->hdr.count) ||
                     index - lowstale - 1 < highstale - index)) {

/src/git/linux-2.6/fs/xfs/xfs_dir2_node.c(300)
/src/git/linux-2.6/fs/xfs/xfs_dir2_leaf.c(499)
                        if (index - lowstale - 1 > 0)
                                memmove(&leaf->ents[lowstale],
                                        &leaf->ents[lowstale + 1],
                                        (index - lowstale - 1) * sizeof(*lep));
                        lep = &leaf->ents[index - 1];
                        lfloglow = MIN(lowstale, lfloglow);
                        lfloghigh = MAX(index - 1, lfloghigh);
                else {

/src/git/linux-2.6/fs/xfs/xfs_dir2_node.c(316)
/src/git/linux-2.6/fs/xfs/xfs_dir2_leaf.c(518)
                        if (highstale - index > 0)
                                memmove(&leaf->ents[index + 1],
                                        &leaf->ents[index],
                                        (highstale - index) * sizeof(*lep));
                        lep = &leaf->ents[index];
                        lfloglow = MIN(index, lfloglow);
                        lfloghigh = MAX(highstale, lfloghigh);
                be16_add_cpu(&leaf->hdr.stale, -1);
        lep->hashval = cpu_to_be32(args->hashval);

/src/git/linux-2.6/fs/xfs/xfs_dir2_node.c(582)
/src/git/linux-2.6/fs/xfs/xfs_dir2_leaf.c(1349)
        for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) &&
                                be32_to_cpu(lep->hashval) == args->hashval;
                                lep++, index++) {
                if (be32_to_cpu(lep->address) == XFS_DIR2_NULL_DATAPTR)
                        continue;
                newdb = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address));
                if (newdb != curdb) {

/src/git/linux-2.6/fs/xfs/xfs_dir2_node.c(442)
/src/git/linux-2.6/fs/xfs/xfs_dir2_leaf.c(1349)
        for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) &&
                                be32_to_cpu(lep->hashval) == args->hashval;
                                lep++, index++) {
                if (be32_to_cpu(lep->address) == XFS_DIR2_NULL_DATAPTR)
                        continue;
                newdb = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address));
                if (newdb != curdb) {


<Prev in Thread] Current Thread [Next in Thread>