lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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