aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2010-08-25 05:58:05 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2010-10-14 12:38:32 -0400
commit76d2e7eca8e7675c6d7a6592f9e747b121cc8a87 (patch)
tree0fef8428c57574046bdd650c4040c9c3d299aba5 /drivers/block/drbd/drbd_main.c
parent1090c056c5eb6d5335cceb381683e77ac24c71ab (diff)
drbd: Adding support for BIO/Request flags: REQ_FUA, REQ_FLUSH and REQ_DISCARD
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
-rw-r--r--drivers/block/drbd/drbd_main.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index ab1244e0045..1827cf073c2 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2426,6 +2426,18 @@ static int _drbd_send_zc_ee(struct drbd_conf *mdev, struct drbd_epoch_entry *e)
2426 return 1; 2426 return 1;
2427} 2427}
2428 2428
2429static u32 bio_flags_to_wire(struct drbd_conf *mdev, unsigned long bi_rw)
2430{
2431 if (mdev->agreed_pro_version >= 95)
2432 return (bi_rw & REQ_SYNC ? DP_RW_SYNC : 0) |
2433 (bi_rw & REQ_UNPLUG ? DP_UNPLUG : 0) |
2434 (bi_rw & REQ_FUA ? DP_FUA : 0) |
2435 (bi_rw & REQ_FLUSH ? DP_FLUSH : 0) |
2436 (bi_rw & REQ_DISCARD ? DP_DISCARD : 0);
2437 else
2438 return bi_rw & (REQ_SYNC | REQ_UNPLUG) ? DP_RW_SYNC : 0;
2439}
2440
2429/* Used to send write requests 2441/* Used to send write requests
2430 * R_PRIMARY -> Peer (P_DATA) 2442 * R_PRIMARY -> Peer (P_DATA)
2431 */ 2443 */
@@ -2459,21 +2471,9 @@ int drbd_send_dblock(struct drbd_conf *mdev, struct drbd_request *req)
2459 p.block_id = (unsigned long)req; 2471 p.block_id = (unsigned long)req;
2460 p.seq_num = cpu_to_be32(req->seq_num = 2472 p.seq_num = cpu_to_be32(req->seq_num =
2461 atomic_add_return(1, &mdev->packet_seq)); 2473 atomic_add_return(1, &mdev->packet_seq));
2462 dp_flags = 0;
2463 2474
2464 /* NOTE: no need to check if barriers supported here as we would 2475 dp_flags = bio_flags_to_wire(mdev, req->master_bio->bi_rw);
2465 * not pass the test in make_request_common in that case 2476
2466 */
2467 if (req->master_bio->bi_rw & REQ_HARDBARRIER) {
2468 dev_err(DEV, "ASSERT FAILED would have set DP_HARDBARRIER\n");
2469 /* dp_flags |= DP_HARDBARRIER; */
2470 }
2471 if (req->master_bio->bi_rw & REQ_SYNC)
2472 dp_flags |= DP_RW_SYNC;
2473 /* for now handle SYNCIO and UNPLUG
2474 * as if they still were one and the same flag */
2475 if (req->master_bio->bi_rw & REQ_UNPLUG)
2476 dp_flags |= DP_RW_SYNC;
2477 if (mdev->state.conn >= C_SYNC_SOURCE && 2477 if (mdev->state.conn >= C_SYNC_SOURCE &&
2478 mdev->state.conn <= C_PAUSED_SYNC_T) 2478 mdev->state.conn <= C_PAUSED_SYNC_T)
2479 dp_flags |= DP_MAY_SET_IN_SYNC; 2479 dp_flags |= DP_MAY_SET_IN_SYNC;