duplicate code in dir2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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) {


_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs


[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux