It was bad idea to try all dirs from all groups for donor especially for big 
filesystems.
Let's scan only local ones.

Signed-off-by: Dmitry Monakhov <dmonak...@openvz.org>
---
 misc/e4defrag2.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/misc/e4defrag2.c b/misc/e4defrag2.c
index 771ee51..7aab2b4 100644
--- a/misc/e4defrag2.c
+++ b/misc/e4defrag2.c
@@ -1830,6 +1830,7 @@ static int do_find_donor(struct defrag_context *dfx, 
dgrp_t group,
        int dir, i, ret = 0;
        struct stat64 st;
        dgrp_t donor_grp;
+       int dir_retries = 3;
        unsigned char *raw_fh = dfx->group[group]->dir_rawh;
        const char *dfname = ".e4defrag2_donor.tmp";
 
@@ -1896,7 +1897,7 @@ static int do_find_donor(struct defrag_context *dfx, 
dgrp_t group,
        try_next:
                close(dir);
                close_donor(donor);
-               if (ret)
+               if (ret || !dir_retries--)
                        return -1;
        }
 
@@ -1934,7 +1935,7 @@ static int prepare_donor(struct defrag_context *dfx, 
dgrp_t group,
                return -1;
 
        /* Sequentially search groups and create first available */
-       for (i = 0; i < nr_groups; i++) {
+       for (i = 1; i < 16; i++) {
                if (dfx->group[(group + i) % nr_groups]) {
                        ret = do_find_donor(dfx, (group + i) % nr_groups,
                                            donor, blocks, 0, max_frag);
-- 
1.7.1

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to