From: Kazuya Mio <k-mio@sx.jp.nec.com>
To: ext4 <linux-ext4@vger.kernel.org>, Theodore Tso <tytso@mit.edu>
Subject: [PATCH v2 05/12] e4defrag: Add force option for e4defrag
Date: Wed, 17 Aug 2011 16:47:22 +0900 [thread overview]
Message-ID: <4E4B720A.5000908@sx.jp.nec.com> (raw)
Currently, e4defrag calls EXT4_IOC_MOVE_EXT ioctl if the fragmentation score
of a donor file is zero. However, it is difficult sometimes to create the file
that has the average of 4096 blocks per extent. We can use e4defrag -F to defrag
in this case.
Signed-off-by: Kazuya Mio <k-mio@sx.jp.nec.com>
---
misc/e4defrag.8.in | 5 ++++-
misc/e4defrag.c | 14 ++++++++++----
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/misc/e4defrag.8.in b/misc/e4defrag.8.in
index 81adc29..ede7455 100644
--- a/misc/e4defrag.8.in
+++ b/misc/e4defrag.8.in
@@ -4,7 +4,7 @@ e4defrag \- online defragmenter for ext4 filesystem
.SH SYNOPSIS
.B e4defrag
[
-.B \-v
+.B \-Fv
]
.I target
\&...
@@ -31,6 +31,9 @@ gets the mount point of it and reduces fragmentation of all files in this mount
point.
.SH OPTIONS
.TP
+.B \-F
+Force defrag if the fragmentation gets better.
+.TP
.B \-v
Print error messages and the fragmentation count before and after defrag for
each file.
diff --git a/misc/e4defrag.c b/misc/e4defrag.c
index 44d54f3..64b1474 100644
--- a/misc/e4defrag.c
+++ b/misc/e4defrag.c
@@ -80,6 +80,7 @@
/* The mode of defrag */
#define DETAIL 0x01
+#define FORCE 0x02
#define DEVNAME 0
#define DIRNAME 1
@@ -107,7 +108,7 @@
/* The following macros are error message */
#define MSG_USAGE \
-"Usage : e4defrag [-v] file...| directory...| device...\n"
+"Usage : e4defrag [-Fv] file...| directory...| device...\n"
#define NGMSG_EXT4 "Filesystem is not ext4 filesystem"
#define NGMSG_FILE_EXTENT "Failed to get file extents"
@@ -1153,7 +1154,8 @@ check_improvement:
extents_before_defrag += file_frags_start;
}
- if (!orig_score || donor_score) {
+ if (!orig_score || (donor_score && !(mode_flag & FORCE)) ||
+ (orig_score <= donor_score && (mode_flag & FORCE))) {
printf("\033[79;0H\033[K[%u/%u]%s:\t%3d%%",
defraged_file_count, total_count, file, 100);
if (mode_flag & DETAIL)
@@ -1231,8 +1233,12 @@ int main(int argc, char *argv[])
if (argc == 1)
goto out;
- while ((opt = getopt(argc, argv, "v")) != EOF) {
+ while ((opt = getopt(argc, argv, "Fv")) != EOF) {
switch (opt) {
+ case 'F':
+ /* Force defrag if the fragmentation gets better */
+ mode_flag |= FORCE;
+ break;
case 'v':
mode_flag |= DETAIL;
break;
@@ -1245,7 +1251,7 @@ int main(int argc, char *argv[])
goto out;
current_uid = getuid();
- threshold = DEFAULT_THRESHOLD;
+ threshold = (mode_flag & FORCE) ? ~0U : DEFAULT_THRESHOLD;
/* Main process */
for (i = optind; i < argc; i++) {
next reply other threads:[~2011-08-17 8:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-17 7:47 Kazuya Mio [this message]
2011-08-17 16:31 ` [PATCH v2 05/12] e4defrag: Add force option for e4defrag Andreas Dilger
2011-08-18 8:57 ` Kazuya Mio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E4B720A.5000908@sx.jp.nec.com \
--to=k-mio@sx.jp.nec.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.