[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20826: SEEK_HOLE not supported for ext4 for kernel < 3.1
From: |
Johannes Meixner |
Subject: |
bug#20826: SEEK_HOLE not supported for ext4 for kernel < 3.1 |
Date: |
Tue, 16 Jun 2015 14:28:42 +0200 (CEST) |
User-agent: |
Alpine 2.00 (LNX 1167 2008-08-23) |
From one of our (SUSE) kernel developers
I even got a proposal for a workaround in grep:
--- a/src/grep.c
+++ b/src/grep.c
@@ -575,6 +575,17 @@ file_textbin (char *buf, size_t size, in
off_t hole_start = lseek (fd, cur, SEEK_HOLE);
if (0 <= hole_start)
{
+ /* if hole_start is identical with cur, it's more likely a buggy
+ * lseek(SEEK_HOLE) implementation in kernel filesystem;
+ * check whether it really reads a null byte.
+ */
+ if (hole_start == cur)
+ {
+ char c;
+ if (read (fd, &c, 1) != 1 || c != 0)
+ hole_start = st->st_size; /* no hole */
+ }
+
if (lseek (fd, cur, SEEK_SET) < 0)
suppressible_error (filename, errno);
if (hole_start < st->st_size)