summaryrefslogtreecommitdiffstats
path: root/src/kernel/blk.c
diff options
context:
space:
mode:
authorJonathan Bauer2018-04-04 17:47:01 +0200
committerSimon Rettberg2018-04-05 12:28:13 +0200
commit928cdb2a034572d29cda884b927cca293baae211 (patch)
tree756d260b89628e18079302293b2a8f45a556d59c /src/kernel/blk.c
parent[KERNEL] #ifs and #defines for timer pre/post 4.15 (diff)
downloaddnbd3-928cdb2a034572d29cda884b927cca293baae211.tar.gz
dnbd3-928cdb2a034572d29cda884b927cca293baae211.tar.xz
dnbd3-928cdb2a034572d29cda884b927cca293baae211.zip
[KERNEL] Pre/post 4.11 handling of request ops
Diffstat (limited to 'src/kernel/blk.c')
-rw-r--r--src/kernel/blk.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/kernel/blk.c b/src/kernel/blk.c
index 6f2523c..511d349 100644
--- a/src/kernel/blk.c
+++ b/src/kernel/blk.c
@@ -25,6 +25,22 @@
#include <linux/pagemap.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+#define dnbd3_req_read(req) \
+ req_op(req) == REQ_OP_READ
+#define dnbd3_req_fs(req) \
+ dnbd3_req_read(req) || req_op(req) == REQ_OP_WRITE
+#define dnbd3_req_special(req) \
+ blk_rq_is_private(req)
+#else
+#define dnbd3_req_read(req) \
+ rq_data_dir(req) == READ
+#define dnbd3_req_fs(req) \
+ req->cmd_type == REQ_TYPE_FS
+#define dnbd3_req_special(req) \
+ req->cmd_type == REQ_TYPE_SPECIAL
+#endif
+
int dnbd3_blk_add_device(dnbd3_device_t *dev, int minor)
{
struct gendisk *disk;
@@ -267,7 +283,7 @@ void dnbd3_blk_request(struct request_queue *q)
continue;
}
- if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE)
+ if (!(dnbd3_req_fs(req)))
{
__blk_end_request_all(req, 0);
continue;
@@ -279,7 +295,7 @@ void dnbd3_blk_request(struct request_queue *q)
continue;
}
- if (req_op(req) != REQ_OP_READ)
+ if (!(dnbd3_req_read(req)))
{
__blk_end_request_all(req, -EACCES);
continue;
@@ -341,13 +357,13 @@ void dnbd3_blk_fail_all_requests(dnbd3_device_t *dev)
list_for_each_entry_safe(blk_request, tmp_request, &local_copy, queuelist)
{
list_del_init(&blk_request->queuelist);
- if (req_op(blk_request) == REQ_OP_READ || req_op(blk_request) == REQ_OP_WRITE)
+ if (dnbd3_req_fs(blk_request))
{
spin_lock_irqsave(&dev->blk_lock, flags);
__blk_end_request_all(blk_request, -EIO);
spin_unlock_irqrestore(&dev->blk_lock, flags);
}
- else if (blk_rq_is_private(blk_request))
+ else if (dnbd3_req_special(blk_request))
{
kfree(blk_request);
}