[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Thu, 22 Jul 2010 10:03:16 -0400
From: Theodore Ts'o <tytso@....edu>
To: Renzo Davoli <renzo@...unibo.it>
Cc: Ext4 Developers List <linux-ext4@...r.kernel.org>,
Theodore Ts'o <tytso@....edu>
Subject: [PATCH 5/7] debugfs: Add new debugfs command punch (aka truncate)
This uses the newly added ext2fs_punch() function.
Signed-off-by: "Theodore Ts'o" <tytso@....edu>
---
debugfs/debug_cmds.ct | 3 +++
debugfs/debugfs.8.in | 12 ++++++++++++
debugfs/debugfs.c | 31 +++++++++++++++++++++++++++++++
debugfs/debugfs.h | 1 +
4 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/debugfs/debug_cmds.ct b/debugfs/debug_cmds.ct
index 95dea0d..9b6c985 100644
--- a/debugfs/debug_cmds.ct
+++ b/debugfs/debug_cmds.ct
@@ -148,6 +148,9 @@ request do_dirsearch, "Search a directory for a particular filename",
request do_bmap, "Calculate the logical->physical block mapping for an inode",
bmap;
+request do_punch, "Punch (or truncate) blocks from an inode by deallocating them",
+ punch, truncate;
+
request do_imap, "Calculate the location of an inode",
imap;
diff --git a/debugfs/debugfs.8.in b/debugfs/debugfs.8.in
index 9012a56..faa23eb 100644
--- a/debugfs/debugfs.8.in
+++ b/debugfs/debugfs.8.in
@@ -376,6 +376,18 @@ flag causes the filesystem to be opened in exclusive mode. The
options behave the same as the command-line options to
.BR debugfs .
.TP
+.I punch filespec start_blk [end_blk]
+Delete the blocks in the inode ranging from
+.I start_blk
+to
+.IR end_blk .
+If
+.I end_blk
+is omitted then this command will function as a truncate command; that
+is, all of the blocks starting at
+.I start_blk
+through to the end of the file will be deallocated.
+.TP
.I pwd
Print the current working directory.
.TP
diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
index 8e0dc55..260c38d 100644
--- a/debugfs/debugfs.c
+++ b/debugfs/debugfs.c
@@ -2102,6 +2102,37 @@ void do_supported_features(int argc, char *argv[])
}
}
+void do_punch(int argc, char *argv[])
+{
+ ext2_ino_t ino;
+ blk64_t start, end;
+ int err;
+ errcode_t errcode;
+
+ if (common_args_process(argc, argv, 3, 4, argv[0],
+ "<file> start_blk [end_blk]",
+ CHECK_FS_RW | CHECK_FS_BITMAPS))
+ return;
+
+ ino = string_to_inode(argv[1]);
+ if (!ino)
+ return;
+ start = parse_ulong(argv[2], argv[0], "logical_block", &err);
+ if (argc == 4)
+ end = parse_ulong(argv[3], argv[0], "logical_block", &err);
+ else
+ end = ~0;
+
+ errcode = ext2fs_punch(current_fs, ino, 0, 0, start, end);
+
+ if (errcode) {
+ com_err(argv[0], errcode,
+ "while truncating inode %u from %llu to %llu\n", ino,
+ (unsigned long long) start, (unsigned long long) end);
+ return;
+ }
+}
+
static int source_file(const char *cmd_file, int sci_idx)
{
FILE *f;
diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h
index deaa56f..4cc8a1f 100644
--- a/debugfs/debugfs.h
+++ b/debugfs/debugfs.h
@@ -127,4 +127,5 @@ extern void do_bmap(int argc, char **argv);
extern void do_imap(int argc, char **argv);
extern void do_set_current_time(int argc, char **argv);
extern void do_supported_features(int argc, char **argv);
+extern void do_punch(int argc, char **argv);
--
1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists