[PATCH] slurpfile: use lseek() on block nodes instead of fstat() for file size

Austin Morgan admorgan at morgancomputers.net
Thu Oct 28 17:25:27 EDT 2010

fstat() is used to determine the file size before read() and
it requires a files ystem. That means that it can not be used
on block nodes. This makes it impossible to obtain the
kernel from a raw block device.

We can't use this in every case because files in /proc doesn't
support lseek().

Signed-off-by: Austin Morgan <admorgan at morgancomputers.net>
 kexec/kexec.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kexec/kexec.c b/kexec/kexec.c
index 10ad41d..e9d6a54 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -499,7 +499,7 @@ char *slurp_file(const char *filename, off_t *r_size)
 	 * This does not work on regular files which live in /proc and
 	 * we need this for some /proc/device-tree entries
-	if (S_ISCHR(stats.st_mode)) {
+	if (S_ISCHR(stats.st_mode) || S_ISBLK(stats.st_mode)) {
 		size = lseek(fd, 0, SEEK_END);
 		if (size < 0)

More information about the kexec mailing list