summaryrefslogtreecommitdiffstats
path: root/main/iscsitarget-grsec/iscsitarget-0.4.17+linux-2.6.28.patch
blob: ec35cd526f4cfcd905d2a2d3c928951732ce3943 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
From c5e70fc826aad5efb786c47d294e3c0c76246d63 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Diego=20E.=20'Flameeyes'=20Petten=C3=B2?= <flameeyes@gmail.com>
Date: Sat, 3 Jan 2009 00:09:43 +0100
Subject: [PATCH] Fix building with Linux kernel 2.6.28 and later.

With changeset 30c40d2c01f68c7eb1a41ab3552bdaf5dbf300d4 of the Linux
kernel, the functions open_bdev_excl and close_bdev_excl were replaced with
functionally-equivalent open_bdev_exclusive and close_bdev_exclusive.

The new interface uses fmode_t instead of integer flags to carry on the
opening mode for a block device, thus require some minor changes in the
calls.
---
 kernel/block-io.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/kernel/block-io.c b/kernel/block-io.c
index e4a25f7..2c5f6f6 100644
--- a/kernel/block-io.c
+++ b/kernel/block-io.c
@@ -18,6 +18,14 @@
 #include "iscsi_dbg.h"
 #include "iotype.h"
 
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
+# define HAVE_OPEN_BDEV_EXCLUSIVE 1
+#else
+# define HAVE_OPEN_BDEV_EXCLUSIVE 0
+#endif
+
 struct blockio_data {
 	char *path;
 	struct block_device *bdev;
@@ -154,14 +160,22 @@ blockio_open_path(struct iet_volume *volume, const char *path)
 {
 	struct blockio_data *bio_data = volume->private;
 	struct block_device *bdev;
+#if HAVE_OPEN_BDEV_EXCLUSIVE
+	fmode_t mode = FMODE_READ | ( LUReadonly(volume) ? 0 : FMODE_WRITE );
+#else
 	int flags = LUReadonly(volume) ? MS_RDONLY : 0;
+#endif
 	int err = 0;
 
 	bio_data->path = kstrdup(path, GFP_KERNEL);
 	if (!bio_data->path)
 		return -ENOMEM;
 
+#if HAVE_OPEN_BDEV_EXCLUSIVE
+	bdev = open_bdev_exclusive(path, mode, THIS_MODULE);
+#else
 	bdev = open_bdev_excl(path, flags, THIS_MODULE);
+#endif
 	if (IS_ERR(bdev)) {
 		err = PTR_ERR(bdev);
 		eprintk("Can't open device %s, error %d\n", path, err);
@@ -323,9 +337,16 @@ static void
 blockio_detach(struct iet_volume *volume)
 {
 	struct blockio_data *bio_data = volume->private;
+#if HAVE_OPEN_BDEV_EXCLUSIVE
+	fmode_t mode = FMODE_READ | ( LUReadonly(volume) ? 0 : FMODE_WRITE );
+#endif
 
 	if (bio_data->bdev)
+#if HAVE_OPEN_BDEV_EXCLUSIVE
+		close_bdev_exclusive(bio_data->bdev, mode);
+#else
 		close_bdev_excl(bio_data->bdev);
+#endif
 	kfree(bio_data->path);
 
 	kfree(volume->private);
-- 
1.6.0.6