diff options
Diffstat (limited to 'meta/recipes-core/util-linux/util-linux/0001-lib-loopdev-fix-loopcxt_check_size-to-work-with-blkd.patch')
-rw-r--r-- | meta/recipes-core/util-linux/util-linux/0001-lib-loopdev-fix-loopcxt_check_size-to-work-with-blkd.patch | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/meta/recipes-core/util-linux/util-linux/0001-lib-loopdev-fix-loopcxt_check_size-to-work-with-blkd.patch b/meta/recipes-core/util-linux/util-linux/0001-lib-loopdev-fix-loopcxt_check_size-to-work-with-blkd.patch deleted file mode 100644 index d1093f21ef..0000000000 --- a/meta/recipes-core/util-linux/util-linux/0001-lib-loopdev-fix-loopcxt_check_size-to-work-with-blkd.patch +++ /dev/null | |||
@@ -1,60 +0,0 @@ | |||
1 | Upstream-Status: Backport | ||
2 | Signed-off-by: Jonathan Liu <net147@gmail.com> | ||
3 | |||
4 | From e3b6cb87e0ba1304fa07ec316784de1c6243b28e Mon Sep 17 00:00:00 2001 | ||
5 | From: Karel Zak <kzak@redhat.com> | ||
6 | Date: Mon, 13 May 2013 10:54:41 +0200 | ||
7 | Subject: [PATCH] lib/loopdev: fix loopcxt_check_size() to work with blkdevs | ||
8 | |||
9 | The loopcxt_check_size() is workaround for kernels < v3.9, kernel has | ||
10 | been fixed by commit 541c742a7559eb65f0e36d3e2338c2ca532a3e61. | ||
11 | |||
12 | The function sets loopdev size according to backing file size. The | ||
13 | problem is that the backing file could be a block device where | ||
14 | stat.st_size is zero, so we have to use blkdev_get_size() for block | ||
15 | devices. | ||
16 | |||
17 | Addresses: https://bugs.archlinux.org/task/35193 | ||
18 | Reported-by: Dave Reisner <d@falconindy.com> | ||
19 | Signed-off-by: Karel Zak <kzak@redhat.com> | ||
20 | --- | ||
21 | lib/loopdev.c | 16 +++++++++++++++- | ||
22 | 1 file changed, 15 insertions(+), 1 deletion(-) | ||
23 | |||
24 | diff --git a/lib/loopdev.c b/lib/loopdev.c | ||
25 | index c35e306..3b65b5d 100644 | ||
26 | --- a/lib/loopdev.c | ||
27 | +++ b/lib/loopdev.c | ||
28 | @@ -1097,7 +1097,17 @@ static int loopcxt_check_size(struct loopdev_cxt *lc, int file_fd) | ||
29 | if (fstat(file_fd, &st)) | ||
30 | return -errno; | ||
31 | |||
32 | - expected_size = st.st_size; | ||
33 | + if (S_ISBLK(st.st_mode)) { | ||
34 | + if (blkdev_get_size(file_fd, | ||
35 | + (unsigned long long *) &expected_size)) | ||
36 | + return -errno; | ||
37 | + } else | ||
38 | + expected_size = st.st_size; | ||
39 | + | ||
40 | + if (expected_size == 0 || expected_size <= lc->info.lo_offset) { | ||
41 | + DBG(lc, loopdev_debug("failed to determine expected size")); | ||
42 | + return 0; /* ignore this error */ | ||
43 | + } | ||
44 | |||
45 | if (lc->info.lo_offset > 0) | ||
46 | expected_size -= lc->info.lo_offset; | ||
47 | @@ -1113,6 +1123,10 @@ static int loopcxt_check_size(struct loopdev_cxt *lc, int file_fd) | ||
48 | return -errno; | ||
49 | |||
50 | if (expected_size != size) { | ||
51 | + DBG(lc, loopdev_debug("warning: loopdev and expected " | ||
52 | + "size dismatch (%ju/%ju)", | ||
53 | + size, expected_size)); | ||
54 | + | ||
55 | if (loopcxt_set_capacity(lc)) { | ||
56 | /* ioctl not available */ | ||
57 | if (errno == ENOTTY || errno == EINVAL) | ||
58 | -- | ||
59 | 1.8.2.3 | ||
60 | |||