~ubuntu-branches/ubuntu/trusty/drbd8/trusty

« back to all changes in this revision

Viewing changes to drbd/drbd_int.h

  • Committer: Bazaar Package Importer
  • Author(s): Andres Rodriguez
  • Date: 2011-07-05 15:40:13 UTC
  • mfrom: (1.4.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20110705154013-f9l32owj6mi9e1p0
Tags: 2:8.3.11-0ubuntu1
* New upstream release
* debian/patches/01_ubuntu_cn_idx.dpatch: Refreshed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
94
94
#include <linux/blkdev.h>
95
95
#include <linux/bio.h>
96
96
 
97
 
/* XXX do we need this? */
98
 
#ifndef TRUE
99
 
#define TRUE 1
100
 
#endif
101
 
#ifndef FALSE
102
 
#define FALSE 0
103
 
#endif
104
 
 
105
97
/* I don't remember why XCPU ...
106
98
 * This is used to wake the asender,
107
99
 * and to interrupt sending the sending task
129
121
#define ID_SYNCER (-1ULL)
130
122
#define ID_VACANT 0
131
123
#define is_syncer_block_id(id) ((id) == ID_SYNCER)
 
124
#define UUID_NEW_BM_OFFSET ((u64)0x0001000000000000ULL)
132
125
 
133
126
struct drbd_conf;
134
127
 
175
168
 * dev_printk() expects to be presented a struct device *;
176
169
 * in older kernels, (<= 2.6.24), there is nothing suitable there.
177
170
 * "backport" hack: redefine dev_printk.
178
 
 * Trigger is definition of dev_to_disk marcro, introduced with the
 
171
 * Trigger is definition of dev_to_disk macro, introduced with the
179
172
 * commit edfaa7c36574f1bf09c65ad602412db9da5f96bf
180
173
 *     Driver core: convert block from raw kobjects to core devices
181
174
 */
201
194
 
202
195
 
203
196
/* see kernel/printk.c:printk_ratelimit
204
 
 * macro, so it is easy do have independend rate limits at different locations
 
197
 * macro, so it is easy do have independent rate limits at different locations
205
198
 * "initializer element not constant ..." with kernel 2.4 :(
206
199
 * so I initialize toks to something large
207
200
 */
265
258
 
266
259
extern void trace_drbd_resync(struct drbd_conf *mdev, int level, const char *fmt, ...);
267
260
 
268
 
#ifdef DRBD_ENABLE_FAULTS
269
261
extern unsigned int
270
262
_drbd_insert_fault(struct drbd_conf *mdev, unsigned int type);
 
263
 
271
264
static inline int
272
265
drbd_insert_fault(struct drbd_conf *mdev, unsigned int type) {
 
266
#ifdef DRBD_ENABLE_FAULTS
273
267
        return fault_rate &&
274
268
                (enable_faults & (1<<type)) &&
275
269
                _drbd_insert_fault(mdev, type);
276
 
}
277
 
#define FAULT_ACTIVE(_m, _t) (drbd_insert_fault((_m), (_t)))
278
 
 
279
270
#else
280
 
#define FAULT_ACTIVE(_m, _t) (0)
 
271
        return 0;
281
272
#endif
 
273
}
282
274
 
283
275
/* integer division, round _UP_ to the next integer */
284
276
#define div_ceil(A, B) ((A)/(B) + ((A)%(B) ? 1 : 0))
356
348
        /* P_CKPT_FENCE_REQ      = 0x25, * currently reserved for protocol D */
357
349
        /* P_CKPT_DISABLE_REQ    = 0x26, * currently reserved for protocol D */
358
350
        P_DELAY_PROBE         = 0x27, /* is used on BOTH sockets */
 
351
        P_OUT_OF_SYNC         = 0x28, /* Mark as out of sync (Outrunning), data socket */
 
352
        P_RS_CANCEL           = 0x29, /* meta: Used to cancel RS_DATA_REQUEST packet by SyncSource */
359
353
 
360
 
        P_MAX_CMD             = 0x29,
 
354
        P_MAX_CMD             = 0x2A,
361
355
        P_MAY_IGNORE          = 0x100, /* Flag to test if (cmd > P_MAY_IGNORE) ... */
362
356
        P_MAX_OPT_CMD         = 0x101,
363
357
 
413
407
                [P_RS_IS_IN_SYNC]       = "CsumRSIsInSync",
414
408
                [P_COMPRESSED_BITMAP]   = "CBitmap",
415
409
                [P_DELAY_PROBE]         = "DelayProbe",
 
410
                [P_OUT_OF_SYNC]         = "OutOfSync",
416
411
                [P_MAX_CMD]             = NULL,
417
412
        };
418
413
 
518
513
 */
519
514
 
520
515
/* these defines must not be changed without changing the protocol version */
521
 
#define DP_HARDBARRIER        1 /* depricated */
 
516
#define DP_HARDBARRIER        1 /* no longer used */
522
517
#define DP_RW_SYNC            2 /* equals REQ_SYNC    */
523
518
#define DP_MAY_SET_IN_SYNC    4
524
519
#define DP_UNPLUG             8 /* equals REQ_UNPLUG  */
575
570
        u32 protocol_max;
576
571
 
577
572
        /* should be more than enough for future enhancements
578
 
         * for now, feature_flags and the reserverd array shall be zero.
 
573
         * for now, feature_flags and the reserved array shall be zero.
579
574
         */
580
575
 
581
576
        u32 _pad;
582
 
        u64 reserverd[7];
 
577
        u64 reserved[7];
583
578
} __packed;
584
579
/* 80 bytes, FIXED for the next century */
585
580
 
656
651
        u64         d_size;  /* size of disk */
657
652
        u64         u_size;  /* user requested size */
658
653
        u64         c_size;  /* current exported size */
659
 
        u32         max_segment_size;  /* Maximal size of a BIO */
 
654
        u32         max_bio_size;  /* Maximal size of a BIO */
660
655
        u16         queue_order_type;  /* not yet implemented in DRBD*/
661
656
        u16         dds_flags; /* use enum dds_flags here. */
662
657
} __packed;
694
689
        u32         pad;
695
690
} __packed;
696
691
 
 
692
struct p_block_desc {
 
693
        struct p_header80 head;
 
694
        u64 sector;
 
695
        u32 blksize;
 
696
        u32 pad;        /* to multiple of 8 Byte */
 
697
} __packed;
 
698
 
697
699
/* Valid values for the encoding field.
698
700
 * Bump proto version when changing this. */
699
701
enum drbd_bitmap_code {
761
763
}
762
764
 
763
765
/* one bitmap packet, including the p_header,
764
 
 * should fit within one _architecture independend_ page.
 
766
 * should fit within one _architecture independent_ page.
765
767
 * so we need to use the fixed size 4KiB page size
766
 
 * most architechtures have used for a long time.
 
768
 * most architectures have used for a long time.
767
769
 */
768
770
#define BM_PACKET_PAYLOAD_BYTES (4096 - sizeof(struct p_header80))
769
771
#define BM_PACKET_WORDS (BM_PACKET_PAYLOAD_BYTES/sizeof(long))
791
793
        struct p_block_req       block_req;
792
794
        struct p_delay_probe93   delay_probe93;
793
795
        struct p_rs_uuid         rs_uuid;
 
796
        struct p_block_desc      block_desc;
794
797
} __packed;
795
798
 
796
799
/**********************************************************************/
821
824
        return thi->t_state;
822
825
}
823
826
 
824
 
 
825
 
/*
826
 
 * Having this as the first member of a struct provides sort of "inheritance".
827
 
 * "derived" structs can be "drbd_queue_work()"ed.
828
 
 * The callback should know and cast back to the descendant struct.
829
 
 * drbd_request and drbd_epoch_entry are descendants of drbd_work.
830
 
 */
831
827
struct drbd_work;
832
828
typedef int (*drbd_work_cb)(struct drbd_conf *, struct drbd_work *, int cancel);
833
829
struct drbd_work {
846
842
         * see drbd_endio_pri(). */
847
843
        struct bio *private_bio;
848
844
 
849
 
        struct hlist_node colision;
 
845
        struct hlist_node collision;
850
846
        sector_t sector;
851
847
        unsigned int size;
852
848
        unsigned int epoch; /* barrier_nr */
856
852
         * starting a new epoch...
857
853
         */
858
854
 
859
 
        /* up to here, the struct layout is identical to drbd_epoch_entry;
860
 
         * we might be able to use that to our advantage...  */
861
 
 
862
855
        struct list_head tl_requests; /* ring list in the transfer log */
863
856
        struct bio *master_bio;       /* master bio pointer */
864
857
        unsigned long rq_state; /* see comments above _req_mod() */
925
918
 
926
919
struct drbd_epoch_entry {
927
920
        struct drbd_work w;
928
 
        struct hlist_node colision;
 
921
        struct hlist_node collision;
929
922
        struct drbd_epoch *epoch; /* for writes */
930
923
        struct drbd_conf *mdev;
931
924
        struct page *pages;
951
944
        __EE_MAY_SET_IN_SYNC,
952
945
 
953
946
        /* This epoch entry closes an epoch using a barrier.
954
 
         * On sucessful completion, the epoch is released,
 
947
         * On successful completion, the epoch is released,
955
948
         * and the P_BARRIER_ACK send. */
956
949
        __EE_IS_BARRIER,
957
950
 
976
969
 
977
970
/* global flag bits */
978
971
enum {
979
 
        CREATE_BARRIER,         /* next P_DATA is preceeded by a P_BARRIER */
 
972
        CREATE_BARRIER,         /* next P_DATA is preceded by a P_BARRIER */
980
973
        SIGNAL_ASENDER,         /* whether asender wants to be interrupted */
981
974
        SEND_PING,              /* whether asender should send a ping asap */
982
975
 
991
984
        CRASHED_PRIMARY,        /* This node was a crashed primary.
992
985
                                 * Gets cleared when the state.conn
993
986
                                 * goes into C_CONNECTED state. */
994
 
        WRITE_BM_AFTER_RESYNC,  /* A kmalloc() during resync failed */
995
987
        NO_BARRIER_SUPP,        /* underlying block device doesn't implement barriers */
996
988
        CONSIDER_RESYNC,
997
989
 
1010
1002
                                 * if set, also prevents the device from dying */
1011
1003
        DEVICE_DYING,           /* device became unconfigured,
1012
1004
                                 * but worker thread is still handling the cleanup.
1013
 
                                 * reconfiguring (nl_disk_conf, nl_net_conf) is dissalowed,
 
1005
                                 * reconfiguring (nl_disk_conf, nl_net_conf) is disallowed,
1014
1006
                                 * while this is set. */
1015
1007
        RESIZE_PENDING,         /* Size change detected locally, waiting for the response from
1016
1008
                                 * the peer, if it changed there as well. */
1018
1010
        GOT_PING_ACK,           /* set when we receive a ping_ack packet, misc wait gets woken */
1019
1011
        NEW_CUR_UUID,           /* Create new current UUID when thawing IO */
1020
1012
        AL_SUSPENDED,           /* Activity logging is currently suspended. */
 
1013
        AHEAD_TO_SYNC_SOURCE,   /* Ahead -> SyncSource queued */
1021
1014
};
1022
1015
 
1023
1016
struct drbd_bitmap; /* opaque for drbd_conf */
1024
1017
 
 
1018
/* definition of bits in bm_flags to be used in drbd_bm_lock
 
1019
 * and drbd_bitmap_io and friends. */
 
1020
enum bm_flag {
 
1021
        /* do we need to kfree, or vfree bm_pages? */
 
1022
        BM_P_VMALLOCED = 0x10000, /* internal use only, will be masked out */
 
1023
 
 
1024
        /* currently locked for bulk operation */
 
1025
        BM_LOCKED_MASK = 0x7,
 
1026
 
 
1027
        /* in detail, that is: */
 
1028
        BM_DONT_CLEAR = 0x1,
 
1029
        BM_DONT_SET   = 0x2,
 
1030
        BM_DONT_TEST  = 0x4,
 
1031
 
 
1032
        /* (test bit, count bit) allowed (common case) */
 
1033
        BM_LOCKED_TEST_ALLOWED = 0x3,
 
1034
 
 
1035
        /* testing bits, as well as setting new bits allowed, but clearing bits
 
1036
         * would be unexpected.  Used during bitmap receive.  Setting new bits
 
1037
         * requires sending of "out-of-sync" information, though. */
 
1038
        BM_LOCKED_SET_ALLOWED = 0x1,
 
1039
 
 
1040
        /* clear is not expected while bitmap is locked for bulk operation */
 
1041
};
 
1042
 
 
1043
 
1025
1044
/* TODO sort members for performance
1026
1045
 * MAYBE group them further */
1027
1046
 
1078
1097
struct drbd_backing_dev {
1079
1098
        struct block_device *backing_bdev;
1080
1099
        struct block_device *md_bdev;
1081
 
        struct file *lo_file;
1082
 
        struct file *md_file;
1083
1100
        struct drbd_md md;
1084
1101
        struct disk_conf dc; /* The user provided config... */
1085
1102
        sector_t known_size; /* last known size of that backing device */
1094
1111
struct bm_io_work {
1095
1112
        struct drbd_work w;
1096
1113
        char *why;
 
1114
        enum bm_flag flags;
1097
1115
        int (*io_fn)(struct drbd_conf *mdev);
1098
1116
        void (*done)(struct drbd_conf *mdev, int rv);
1099
1117
};
1136
1154
        struct drbd_work  resync_work,
1137
1155
                          unplug_work,
1138
1156
                          go_diskless,
1139
 
                          md_sync_work;
 
1157
                          md_sync_work,
 
1158
                          start_resync_work;
1140
1159
        struct timer_list resync_timer;
1141
1160
        struct timer_list md_sync_timer;
 
1161
        struct timer_list start_resync_timer;
 
1162
        struct timer_list request_timer;
1142
1163
#ifdef DRBD_DEBUG_MD_SYNC
1143
1164
        struct {
1144
1165
                unsigned int line;
1162
1183
        atomic_t ap_bio_cnt;     /* Requests we need to complete */
1163
1184
        atomic_t ap_pending_cnt; /* AP data packets on the wire, ack expected */
1164
1185
        atomic_t rs_pending_cnt; /* RS request/data packets on the wire */
1165
 
        atomic_t unacked_cnt;    /* Need to send replys for */
 
1186
        atomic_t unacked_cnt;    /* Need to send replies for */
1166
1187
        atomic_t local_cnt;      /* Waiting for local completion */
1167
1188
        atomic_t net_cnt;        /* Users of net_conf */
1168
1189
        spinlock_t req_lock;
1173
1194
        struct hlist_head *tl_hash;
1174
1195
        unsigned int tl_hash_s;
1175
1196
 
1176
 
        /* blocks to sync in this run [unit BM_BLOCK_SIZE] */
 
1197
        /* blocks to resync in this run [unit BM_BLOCK_SIZE] */
1177
1198
        unsigned long rs_total;
1178
 
        /* number of sync IOs that failed in this run */
 
1199
        /* number of resync blocks that failed in this run */
1179
1200
        unsigned long rs_failed;
1180
1201
        /* Syncer's start time [unit jiffies] */
1181
1202
        unsigned long rs_start;
1230
1251
        struct list_head done_ee;   /* send ack */
1231
1252
        struct list_head read_ee;   /* IO in progress (any read) */
1232
1253
        struct list_head net_ee;    /* zero-copy network send in progress */
1233
 
        struct hlist_head *ee_hash; /* is proteced by req_lock! */
 
1254
        struct hlist_head *ee_hash; /* is protected by req_lock! */
1234
1255
        unsigned int ee_hash_s;
1235
1256
 
1236
1257
        /* this one is protected by ee_lock, single thread */
1237
1258
        struct drbd_epoch_entry *last_write_w_barrier;
1238
1259
 
1239
1260
        int next_barrier_nr;
1240
 
        struct hlist_head *app_reads_hash; /* is proteced by req_lock */
 
1261
        struct hlist_head *app_reads_hash; /* is protected by req_lock */
1241
1262
        struct list_head resync_reads;
1242
1263
        atomic_t pp_in_use;             /* allocated from page pool */
1243
1264
        atomic_t pp_in_use_by_net;      /* sendpage()d, still referenced by tcp */
1280
1301
        int c_sync_rate; /* current resync rate after syncer throttle magic */
1281
1302
        struct fifo_buffer rs_plan_s; /* correction values of resync planer */
1282
1303
        int rs_in_flight; /* resync sectors in flight (to proxy, in proxy and from proxy) */
1283
 
        int rs_planed;    /* resync sectors already planed */
 
1304
        int rs_planed;    /* resync sectors already planned */
 
1305
        atomic_t ap_in_flight; /* App sectors in flight (waiting for ack) */
 
1306
        int peer_max_bio_size;
 
1307
        int local_max_bio_size;
1284
1308
};
1285
1309
 
1286
1310
static inline struct drbd_conf *minor_to_mdev(unsigned int minor)
1297
1321
        return mdev->minor;
1298
1322
}
1299
1323
 
1300
 
/* returns 1 if it was successfull,
 
1324
/* returns 1 if it was successful,
1301
1325
 * returns 0 if there was no data socket.
1302
1326
 * so wherever you are going to use the data.socket, e.g. do
1303
1327
 * if (!drbd_get_data_sock(mdev))
1342
1366
};
1343
1367
 
1344
1368
extern void drbd_init_set_defaults(struct drbd_conf *mdev);
1345
 
extern int drbd_change_state(struct drbd_conf *mdev, enum chg_state_flags f,
1346
 
                        union drbd_state mask, union drbd_state val);
 
1369
extern enum drbd_state_rv drbd_change_state(struct drbd_conf *mdev,
 
1370
                                            enum chg_state_flags f,
 
1371
                                            union drbd_state mask,
 
1372
                                            union drbd_state val);
1347
1373
extern void drbd_force_state(struct drbd_conf *, union drbd_state,
1348
1374
                        union drbd_state);
1349
 
extern int _drbd_request_state(struct drbd_conf *, union drbd_state,
1350
 
                        union drbd_state, enum chg_state_flags);
1351
 
extern int __drbd_set_state(struct drbd_conf *, union drbd_state,
1352
 
                            enum chg_state_flags, struct completion *done);
 
1375
extern enum drbd_state_rv _drbd_request_state(struct drbd_conf *,
 
1376
                                              union drbd_state,
 
1377
                                              union drbd_state,
 
1378
                                              enum chg_state_flags);
 
1379
extern enum drbd_state_rv __drbd_set_state(struct drbd_conf *, union drbd_state,
 
1380
                                           enum chg_state_flags,
 
1381
                                           struct completion *done);
1353
1382
extern void print_st_err(struct drbd_conf *, union drbd_state,
1354
1383
                        union drbd_state, int);
1355
1384
extern int  drbd_thread_start(struct drbd_thread *thi);
1365
1394
extern void tl_release(struct drbd_conf *mdev, unsigned int barrier_nr,
1366
1395
                       unsigned int set_size);
1367
1396
extern void tl_clear(struct drbd_conf *mdev);
1368
 
enum drbd_req_event;
1369
 
extern void tl_restart(struct drbd_conf *mdev, enum drbd_req_event what);
1370
1397
extern void _tl_add_barrier(struct drbd_conf *, struct drbd_tl_epoch *);
1371
1398
extern void drbd_free_sock(struct drbd_conf *mdev);
1372
1399
extern int drbd_send(struct drbd_conf *mdev, struct socket *sock,
1374
1401
extern int drbd_send_protocol(struct drbd_conf *mdev);
1375
1402
extern int drbd_send_uuids(struct drbd_conf *mdev);
1376
1403
extern int drbd_send_uuids_skip_initial_sync(struct drbd_conf *mdev);
1377
 
extern int drbd_send_sync_uuid(struct drbd_conf *mdev, u64 val);
 
1404
extern int drbd_gen_and_send_sync_uuid(struct drbd_conf *mdev);
1378
1405
extern int drbd_send_sizes(struct drbd_conf *mdev, int trigger_reply, enum dds_flags flags);
1379
1406
#define drbd_send_state(m) drbd_send_state_(m, __func__ , __LINE__ )
1380
1407
extern int drbd_send_state_(struct drbd_conf *mdev, const char *func, unsigned int line);
1399
1426
                        struct p_data *dp, int data_size);
1400
1427
extern int drbd_send_ack_ex(struct drbd_conf *mdev, enum drbd_packets cmd,
1401
1428
                            sector_t sector, int blksize, u64 block_id);
 
1429
extern int drbd_send_oos(struct drbd_conf *mdev, struct drbd_request *req);
1402
1430
extern int drbd_send_block(struct drbd_conf *mdev, enum drbd_packets cmd,
1403
1431
                           struct drbd_epoch_entry *e);
1404
1432
extern int drbd_send_dblock(struct drbd_conf *mdev, struct drbd_request *req);
1405
 
extern int _drbd_send_barrier(struct drbd_conf *mdev,
1406
 
                        struct drbd_tl_epoch *barrier);
1407
1433
extern int drbd_send_drequest(struct drbd_conf *mdev, int cmd,
1408
1434
                              sector_t sector, int size, u64 block_id);
1409
1435
extern int drbd_send_drequest_csum(struct drbd_conf *mdev,
1414
1440
 
1415
1441
extern int drbd_send_bitmap(struct drbd_conf *mdev);
1416
1442
extern int _drbd_send_bitmap(struct drbd_conf *mdev);
1417
 
extern int drbd_send_sr_reply(struct drbd_conf *mdev, int retcode);
 
1443
extern int drbd_send_sr_reply(struct drbd_conf *mdev, enum drbd_state_rv retcode);
1418
1444
extern void drbd_free_bc(struct drbd_backing_dev *ldev);
1419
1445
extern void drbd_mdev_cleanup(struct drbd_conf *mdev);
 
1446
void drbd_print_uuids(struct drbd_conf *mdev, const char *text);
1420
1447
 
1421
 
/* drbd_meta-data.c (still in drbd_main.c) */
1422
1448
extern void drbd_md_sync(struct drbd_conf *mdev);
1423
1449
extern int  drbd_md_read(struct drbd_conf *mdev, struct drbd_backing_dev *bdev);
1424
 
/* maybe define them below as inline? */
1425
1450
extern void drbd_uuid_set(struct drbd_conf *mdev, int idx, u64 val) __must_hold(local);
1426
1451
extern void _drbd_uuid_set(struct drbd_conf *mdev, int idx, u64 val) __must_hold(local);
1427
1452
extern void drbd_uuid_new_current(struct drbd_conf *mdev) __must_hold(local);
1440
1465
extern void drbd_queue_bitmap_io(struct drbd_conf *mdev,
1441
1466
                                 int (*io_fn)(struct drbd_conf *),
1442
1467
                                 void (*done)(struct drbd_conf *, int),
1443
 
                                 char *why);
 
1468
                                 char *why, enum bm_flag flags);
 
1469
extern int drbd_bitmap_io(struct drbd_conf *mdev,
 
1470
                int (*io_fn)(struct drbd_conf *),
 
1471
                char *why, enum bm_flag flags);
1444
1472
extern int drbd_bmio_set_n_write(struct drbd_conf *mdev);
1445
1473
extern int drbd_bmio_clear_n_write(struct drbd_conf *mdev);
1446
 
extern int drbd_bitmap_io(struct drbd_conf *mdev, int (*io_fn)(struct drbd_conf *), char *why);
1447
1474
extern void drbd_go_diskless(struct drbd_conf *mdev);
1448
1475
extern void drbd_ldev_destroy(struct drbd_conf *mdev);
1449
1476
 
1460
1487
/* Allows up to about 3.8TB */
1461
1488
#define MD_BM_OFFSET (MD_AL_OFFSET + MD_AL_MAX_SIZE)
1462
1489
 
1463
 
/* Since the smalles IO unit is usually 512 byte */
 
1490
/* Since the smallest IO unit is usually 512 byte */
1464
1491
#define MD_SECTOR_SHIFT  9
1465
1492
#define MD_SECTOR_SIZE   (1<<MD_SECTOR_SHIFT)
1466
1493
 
1492
1519
 
1493
1520
#define BME_NO_WRITES  0  /* bm_extent.flags: no more requests on this one! */
1494
1521
#define BME_LOCKED     1  /* bm_extent.flags: syncer active on this one. */
 
1522
#define BME_PRIORITY   2  /* finish resync IO on this extent ASAP! App IO waiting! */
1495
1523
 
1496
1524
/* drbd_bitmap.c */
1497
1525
/*
1569
1597
 * you should use 64bit OS for that much storage, anyways. */
1570
1598
#define DRBD_MAX_SECTORS_FLEX BM_BIT_TO_SECT(0xffff7fff)
1571
1599
#else
1572
 
#define DRBD_MAX_SECTORS_FLEX BM_BIT_TO_SECT(0x1LU << 32)
 
1600
/* we allow up to 1 PiB now on 64bit architecture with "flexible" meta data */
 
1601
#define DRBD_MAX_SECTORS_FLEX (1UL << 51)
 
1602
/* corresponds to (1UL << 38) bits right now. */
1573
1603
#endif
1574
1604
#endif
1575
1605
 
1577
1607
 * With a value of 8 all IO in one 128K block make it to the same slot of the
1578
1608
 * hash table. */
1579
1609
#define HT_SHIFT 8
1580
 
#define DRBD_MAX_SEGMENT_SIZE (1U<<(9+HT_SHIFT))
 
1610
#define DRBD_MAX_BIO_SIZE (1U<<(9+HT_SHIFT))
 
1611
#define DRBD_MAX_BIO_SIZE_SAFE (1 << 12)       /* Works always = 4k */
1581
1612
 
1582
1613
#define DRBD_MAX_SIZE_H80_PACKET (1 << 15) /* The old header only allows packets up to 32Kib data */
1583
1614
 
1589
1620
extern void drbd_bm_cleanup(struct drbd_conf *mdev);
1590
1621
extern void drbd_bm_set_all(struct drbd_conf *mdev);
1591
1622
extern void drbd_bm_clear_all(struct drbd_conf *mdev);
 
1623
/* set/clear/test only a few bits at a time */
1592
1624
extern int  drbd_bm_set_bits(
1593
1625
                struct drbd_conf *mdev, unsigned long s, unsigned long e);
1594
1626
extern int  drbd_bm_clear_bits(
1595
1627
                struct drbd_conf *mdev, unsigned long s, unsigned long e);
1596
 
/* bm_set_bits variant for use while holding drbd_bm_lock */
 
1628
extern int drbd_bm_count_bits(
 
1629
        struct drbd_conf *mdev, const unsigned long s, const unsigned long e);
 
1630
/* bm_set_bits variant for use while holding drbd_bm_lock,
 
1631
 * may process the whole bitmap in one go */
1597
1632
extern void _drbd_bm_set_bits(struct drbd_conf *mdev,
1598
1633
                const unsigned long s, const unsigned long e);
1599
1634
extern int  drbd_bm_test_bit(struct drbd_conf *mdev, unsigned long bitnr);
1600
1635
extern int  drbd_bm_e_weight(struct drbd_conf *mdev, unsigned long enr);
1601
 
extern int  drbd_bm_write_sect(struct drbd_conf *mdev, unsigned long enr) __must_hold(local);
 
1636
extern int  drbd_bm_write_page(struct drbd_conf *mdev, unsigned int idx) __must_hold(local);
1602
1637
extern int  drbd_bm_read(struct drbd_conf *mdev) __must_hold(local);
1603
1638
extern int  drbd_bm_write(struct drbd_conf *mdev) __must_hold(local);
1604
1639
extern unsigned long drbd_bm_ALe_set_all(struct drbd_conf *mdev,
1606
1641
extern size_t        drbd_bm_words(struct drbd_conf *mdev);
1607
1642
extern unsigned long drbd_bm_bits(struct drbd_conf *mdev);
1608
1643
extern sector_t      drbd_bm_capacity(struct drbd_conf *mdev);
 
1644
 
 
1645
#define DRBD_END_OF_BITMAP      (~(unsigned long)0)
1609
1646
extern unsigned long drbd_bm_find_next(struct drbd_conf *mdev, unsigned long bm_fo);
1610
1647
/* bm_find_next variants for use while you hold drbd_bm_lock() */
1611
1648
extern unsigned long _drbd_bm_find_next(struct drbd_conf *mdev, unsigned long bm_fo);
1616
1653
/* for receive_bitmap */
1617
1654
extern void drbd_bm_merge_lel(struct drbd_conf *mdev, size_t offset,
1618
1655
                size_t number, unsigned long *buffer);
1619
 
/* for _drbd_send_bitmap and drbd_bm_write_sect */
 
1656
/* for _drbd_send_bitmap */
1620
1657
extern void drbd_bm_get_lel(struct drbd_conf *mdev, size_t offset,
1621
1658
                size_t number, unsigned long *buffer);
1622
1659
 
1623
 
extern void drbd_bm_lock(struct drbd_conf *mdev, char *why);
 
1660
extern void drbd_bm_lock(struct drbd_conf *mdev, char *why, enum bm_flag flags);
1624
1661
extern void drbd_bm_unlock(struct drbd_conf *mdev);
1625
 
 
1626
 
extern int drbd_bm_count_bits(struct drbd_conf *mdev, const unsigned long s, const unsigned long e);
1627
1662
/* drbd_main.c */
1628
1663
 
1629
1664
/* needs to be included here,
1650
1685
extern int proc_details;
1651
1686
 
1652
1687
/* drbd_req */
1653
 
extern int drbd_make_request_26(struct request_queue *q, struct bio *bio);
 
1688
extern int drbd_make_request(struct request_queue *q, struct bio *bio);
1654
1689
extern int drbd_read_remote(struct drbd_conf *mdev, struct drbd_request *req);
1655
1690
extern int drbd_merge_bvec(struct request_queue *q,
1656
1691
#ifdef HAVE_bvec_merge_data
1668
1703
extern char *ppsize(char *buf, unsigned long long size);
1669
1704
extern sector_t drbd_new_dev_size(struct drbd_conf *, struct drbd_backing_dev *, int);
1670
1705
enum determine_dev_size { dev_size_error = -1, unchanged = 0, shrunk = 1, grew = 2 };
1671
 
extern enum determine_dev_size drbd_determin_dev_size(struct drbd_conf *, enum dds_flags) __must_hold(local);
 
1706
extern enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *, enum dds_flags) __must_hold(local);
1672
1707
extern void resync_after_online_grow(struct drbd_conf *);
1673
 
extern void drbd_setup_queue_param(struct drbd_conf *mdev, unsigned int) __must_hold(local);
1674
 
extern int drbd_set_role(struct drbd_conf *mdev, enum drbd_role new_role,
1675
 
                int force);
 
1708
extern void drbd_reconsider_max_bio_size(struct drbd_conf *mdev);
 
1709
extern enum drbd_state_rv drbd_set_role(struct drbd_conf *mdev,
 
1710
                                        enum drbd_role new_role,
 
1711
                                        int force);
1676
1712
extern enum drbd_disk_state drbd_try_outdate_peer(struct drbd_conf *mdev);
1677
1713
extern void drbd_try_outdate_peer_async(struct drbd_conf *mdev);
1678
1714
extern int drbd_khelper(struct drbd_conf *mdev, char *cmd);
1688
1724
extern int drbd_md_sync_page_io(struct drbd_conf *mdev,
1689
1725
                struct drbd_backing_dev *bdev, sector_t sector, int rw);
1690
1726
extern void drbd_ov_oos_found(struct drbd_conf*, sector_t, int);
 
1727
extern void drbd_rs_controller_reset(struct drbd_conf *mdev);
1691
1728
 
1692
1729
static inline void ov_oos_print(struct drbd_conf *mdev)
1693
1730
{
1711
1748
extern int w_e_end_ov_reply(struct drbd_conf *, struct drbd_work *, int);
1712
1749
extern int w_e_end_ov_req(struct drbd_conf *, struct drbd_work *, int);
1713
1750
extern int w_ov_finished(struct drbd_conf *, struct drbd_work *, int);
1714
 
extern int w_resync_inactive(struct drbd_conf *, struct drbd_work *, int);
 
1751
extern int w_resync_timer(struct drbd_conf *, struct drbd_work *, int);
1715
1752
extern int w_resume_next_sg(struct drbd_conf *, struct drbd_work *, int);
1716
1753
extern int w_send_write_hint(struct drbd_conf *, struct drbd_work *, int);
1717
1754
extern int w_make_resync_request(struct drbd_conf *, struct drbd_work *, int);
1721
1758
extern int w_prev_work_done(struct drbd_conf *, struct drbd_work *, int);
1722
1759
extern int w_e_reissue(struct drbd_conf *, struct drbd_work *, int);
1723
1760
extern int w_restart_disk_io(struct drbd_conf *, struct drbd_work *, int);
 
1761
extern int w_send_oos(struct drbd_conf *, struct drbd_work *, int);
 
1762
extern int w_start_resync(struct drbd_conf *, struct drbd_work *, int);
1724
1763
 
1725
1764
extern void resync_timer_fn(unsigned long data);
 
1765
extern void start_resync_timer_fn(unsigned long data);
1726
1766
 
1727
1767
/* drbd_receiver.c */
1728
 
extern int drbd_rs_should_slow_down(struct drbd_conf *mdev);
 
1768
extern int drbd_rs_should_slow_down(struct drbd_conf *mdev, sector_t sector);
1729
1769
extern int drbd_submit_ee(struct drbd_conf *mdev, struct drbd_epoch_entry *e,
1730
1770
                const unsigned rw, const int fault_type);
1731
1771
extern int drbd_release_ee(struct drbd_conf *mdev, struct list_head *list);
1808
1848
extern void drbd_rs_failed_io(struct drbd_conf *mdev,
1809
1849
                sector_t sector, int size);
1810
1850
extern int drbd_al_read_log(struct drbd_conf *mdev, struct drbd_backing_dev *);
 
1851
extern void drbd_advance_rs_marks(struct drbd_conf *mdev, unsigned long still_to_go);
1811
1852
extern void __drbd_set_in_sync(struct drbd_conf *mdev, sector_t sector,
1812
1853
                int size, const char *file, const unsigned int line);
1813
1854
#define drbd_set_in_sync(mdev, sector, size) \
1814
1855
        __drbd_set_in_sync(mdev, sector, size, __FILE__, __LINE__)
1815
 
extern void __drbd_set_out_of_sync(struct drbd_conf *mdev, sector_t sector,
 
1856
extern int __drbd_set_out_of_sync(struct drbd_conf *mdev, sector_t sector,
1816
1857
                int size, const char *file, const unsigned int line);
1817
1858
#define drbd_set_out_of_sync(mdev, sector, size) \
1818
1859
        __drbd_set_out_of_sync(mdev, sector, size, __FILE__, __LINE__)
1819
1860
extern void drbd_al_apply_to_bm(struct drbd_conf *mdev);
1820
 
extern void drbd_al_to_on_disk_bm(struct drbd_conf *mdev);
1821
1861
extern void drbd_al_shrink(struct drbd_conf *mdev);
1822
1862
 
1823
1863
 
1947
1987
        wake_up(&mdev->misc_wait);
1948
1988
}
1949
1989
 
1950
 
static inline int _drbd_set_state(struct drbd_conf *mdev,
1951
 
                                   union drbd_state ns, enum chg_state_flags flags,
1952
 
                                   struct completion *done)
 
1990
static inline enum drbd_state_rv
 
1991
_drbd_set_state(struct drbd_conf *mdev, union drbd_state ns,
 
1992
                enum chg_state_flags flags, struct completion *done)
1953
1993
{
1954
 
        int rv;
 
1994
        enum drbd_state_rv rv;
1955
1995
 
1956
1996
        read_lock(&global_state_lock);
1957
1997
        rv = __drbd_set_state(mdev, ns, flags, done);
1985
2025
                if (!forcedetach) {
1986
2026
                        if (DRBD_ratelimit(5*HZ, 5))
1987
2027
                                dev_err(DEV, "Local IO failed in %s.\n", where);
 
2028
                        if (mdev->state.disk > D_INCONSISTENT)
 
2029
                                _drbd_set_state(_NS(mdev, disk, D_INCONSISTENT), CS_HARD, NULL);
1988
2030
                        break;
1989
2031
                }
1990
2032
                /* NOTE fall through to detach case if forcedetach set */
2175
2217
 
2176
2218
static inline void drbd_thread_stop(struct drbd_thread *thi)
2177
2219
{
2178
 
        _drbd_thread_stop(thi, FALSE, TRUE);
 
2220
        _drbd_thread_stop(thi, false, true);
2179
2221
}
2180
2222
 
2181
2223
static inline void drbd_thread_stop_nowait(struct drbd_thread *thi)
2182
2224
{
2183
 
        _drbd_thread_stop(thi, FALSE, FALSE);
 
2225
        _drbd_thread_stop(thi, false, false);
2184
2226
}
2185
2227
 
2186
2228
static inline void drbd_thread_restart_nowait(struct drbd_thread *thi)
2187
2229
{
2188
 
        _drbd_thread_stop(thi, TRUE, FALSE);
 
2230
        _drbd_thread_stop(thi, true, false);
2189
2231
}
2190
2232
 
2191
2233
/* counts how many answer packets packets we expect from our peer,
2231
2273
/* counts how many resync-related answers we still expect from the peer
2232
2274
 *                   increase                   decrease
2233
2275
 * C_SYNC_TARGET sends P_RS_DATA_REQUEST (and expects P_RS_DATA_REPLY)
2234
 
 * C_SYNC_SOURCE sends P_RS_DATA_REPLY   (and expects P_WRITE_ACK whith ID_SYNCER)
 
2276
 * C_SYNC_SOURCE sends P_RS_DATA_REPLY   (and expects P_WRITE_ACK with ID_SYNCER)
2235
2277
 *                                         (or P_NEG_ACK with ID_SYNCER)
2236
2278
 */
2237
2279
static inline void inc_rs_pending(struct drbd_conf *mdev)
2304
2346
static inline void put_ldev(struct drbd_conf *mdev)
2305
2347
{
2306
2348
        int i = atomic_dec_return(&mdev->local_cnt);
 
2349
 
 
2350
        /* This may be called from some endio handler,
 
2351
         * so we must not sleep here. */
 
2352
 
2307
2353
        __release(local);
2308
2354
        D_ASSERT(i >= 0);
2309
2355
        if (i == 0) {
2340
2386
static inline void drbd_get_syncer_progress(struct drbd_conf *mdev,
2341
2387
                unsigned long *bits_left, unsigned int *per_mil_done)
2342
2388
{
2343
 
        /*
2344
 
         * this is to break it at compile time when we change that
2345
 
         * (we may feel 4TB maximum storage per drbd is not enough)
2346
 
         */
 
2389
        /* this is to break it at compile time when we change that, in case we
 
2390
         * want to support more than (1<<32) bits on a 32bit arch. */
2347
2391
        typecheck(unsigned long, mdev->rs_total);
2348
2392
 
2349
2393
        /* note: both rs_total and rs_left are in bits, i.e. in
2350
2394
         * units of BM_BLOCK_SIZE.
2351
2395
         * for the percentage, we don't care. */
2352
2396
 
2353
 
        *bits_left = drbd_bm_total_weight(mdev) - mdev->rs_failed;
 
2397
        if (mdev->state.conn == C_VERIFY_S || mdev->state.conn == C_VERIFY_T)
 
2398
                *bits_left = mdev->ov_left;
 
2399
        else
 
2400
                *bits_left = drbd_bm_total_weight(mdev) - mdev->rs_failed;
2354
2401
        /* >> 10 to prevent overflow,
2355
2402
         * +1 to prevent division by zero */
2356
2403
        if (*bits_left > mdev->rs_total) {
2365
2412
                                *bits_left, mdev->rs_total, mdev->rs_failed);
2366
2413
                *per_mil_done = 0;
2367
2414
        } else {
2368
 
                /* make sure the calculation happens in long context */
2369
 
                unsigned long tmp = 1000UL -
2370
 
                                (*bits_left >> 10)*1000UL
2371
 
                                / ((mdev->rs_total >> 10) + 1UL);
 
2415
                /* Make sure the division happens in long context.
 
2416
                 * We allow up to one petabyte storage right now,
 
2417
                 * at a granularity of 4k per bit that is 2**38 bits.
 
2418
                 * After shift right and multiplication by 1000,
 
2419
                 * this should still fit easily into a 32bit long,
 
2420
                 * so we don't need a 64bit division on 32bit arch.
 
2421
                 * Note: currently we don't support such large bitmaps on 32bit
 
2422
                 * arch anyways, but no harm done to be prepared for it here.
 
2423
                 */
 
2424
                unsigned int shift = mdev->rs_total > UINT_MAX ? 16 : 10;
 
2425
                unsigned long left = *bits_left >> shift;
 
2426
                unsigned long total = 1UL + (mdev->rs_total >> shift);
 
2427
                unsigned long tmp = 1000UL - left * 1000UL/total;
2372
2428
                *per_mil_done = tmp;
2373
2429
        }
2374
2430
}
2387
2443
        return mxb;
2388
2444
}
2389
2445
 
2390
 
static inline int drbd_state_is_stable(union drbd_state s)
 
2446
static inline int drbd_state_is_stable(struct drbd_conf *mdev)
2391
2447
{
 
2448
        union drbd_state s = mdev->state;
2392
2449
 
2393
2450
        /* DO NOT add a default clause, we want the compiler to warn us
2394
2451
         * for any newly introduced state we may have forgotten to add here */
2405
2462
        case C_VERIFY_T:
2406
2463
        case C_PAUSED_SYNC_S:
2407
2464
        case C_PAUSED_SYNC_T:
2408
 
                /* maybe stable, look at the disk state */
2409
 
                break;
2410
 
 
2411
 
        /* no new io accepted during tansitional states
2412
 
         * like handshake or teardown */
 
2465
        case C_AHEAD:
 
2466
        case C_BEHIND:
 
2467
                /* transitional states, IO allowed */
2413
2468
        case C_DISCONNECTING:
2414
2469
        case C_UNCONNECTED:
2415
2470
        case C_TIMEOUT:
2420
2475
        case C_WF_REPORT_PARAMS:
2421
2476
        case C_STARTING_SYNC_S:
2422
2477
        case C_STARTING_SYNC_T:
 
2478
                break;
 
2479
 
 
2480
                /* Allow IO in BM exchange states with new protocols */
2423
2481
        case C_WF_BITMAP_S:
 
2482
                if (mdev->agreed_pro_version < 96)
 
2483
                        return 0;
 
2484
                break;
 
2485
 
 
2486
                /* no new io accepted in these states */
2424
2487
        case C_WF_BITMAP_T:
2425
2488
        case C_WF_SYNC_UUID:
2426
2489
        case C_MASK:
2437
2500
                /* disk state is stable as well. */
2438
2501
                break;
2439
2502
 
2440
 
        /* no new io accepted during tansitional states */
 
2503
        /* no new io accepted during transitional states */
2441
2504
        case D_ATTACHING:
2442
2505
        case D_FAILED:
2443
2506
        case D_NEGOTIATING:
2455
2518
        return s.susp || s.susp_nod || s.susp_fen;
2456
2519
}
2457
2520
 
2458
 
static inline int __inc_ap_bio_cond(struct drbd_conf *mdev)
 
2521
static inline bool may_inc_ap_bio(struct drbd_conf *mdev)
2459
2522
{
2460
2523
        int mxb = drbd_get_max_buffers(mdev);
2461
2524
 
2462
2525
        if (is_susp(mdev->state))
2463
 
                return 0;
 
2526
                return false;
2464
2527
        if (test_bit(SUSPEND_IO, &mdev->flags))
2465
 
                return 0;
 
2528
                return false;
2466
2529
 
2467
2530
        /* to avoid potential deadlock or bitmap corruption,
2468
2531
         * in various places, we only allow new application io
2469
2532
         * to start during "stable" states. */
2470
2533
 
2471
2534
        /* no new io accepted when attaching or detaching the disk */
2472
 
        if (!drbd_state_is_stable(mdev->state))
2473
 
                return 0;
 
2535
        if (!drbd_state_is_stable(mdev))
 
2536
                return false;
2474
2537
 
2475
2538
        /* since some older kernels don't have atomic_add_unless,
2476
2539
         * and we are within the spinlock anyways, we have this workaround.  */
2477
2540
        if (atomic_read(&mdev->ap_bio_cnt) > mxb)
2478
 
                return 0;
 
2541
                return false;
2479
2542
        if (test_bit(BITMAP_IO, &mdev->flags))
2480
 
                return 0;
2481
 
        return 1;
2482
 
}
2483
 
 
2484
 
/* I'd like to use wait_event_lock_irq,
2485
 
 * but I'm not sure when it got introduced,
2486
 
 * and not sure when it has 3 or 4 arguments */
 
2543
                return false;
 
2544
        return true;
 
2545
}
 
2546
 
 
2547
static inline bool inc_ap_bio_cond(struct drbd_conf *mdev, int count)
 
2548
{
 
2549
        bool rv = false;
 
2550
 
 
2551
        spin_lock_irq(&mdev->req_lock);
 
2552
        rv = may_inc_ap_bio(mdev);
 
2553
        if (rv)
 
2554
                atomic_add(count, &mdev->ap_bio_cnt);
 
2555
        spin_unlock_irq(&mdev->req_lock);
 
2556
 
 
2557
        return rv;
 
2558
}
 
2559
 
2487
2560
static inline void inc_ap_bio(struct drbd_conf *mdev, int count)
2488
2561
{
2489
 
        /* compare with after_state_ch,
2490
 
         * os.conn != C_WF_BITMAP_S && ns.conn == C_WF_BITMAP_S */
2491
 
        DEFINE_WAIT(wait);
2492
 
 
2493
2562
        /* we wait here
2494
2563
         *    as long as the device is suspended
2495
2564
         *    until the bitmap is no longer on the fly during connection
2496
 
         *    handshake as long as we would exeed the max_buffer limit.
 
2565
         *    handshake as long as we would exceed the max_buffer limit.
2497
2566
         *
2498
2567
         * to avoid races with the reconnect code,
2499
2568
         * we need to atomic_inc within the spinlock. */
2500
2569
 
2501
 
        spin_lock_irq(&mdev->req_lock);
2502
 
        while (!__inc_ap_bio_cond(mdev)) {
2503
 
                prepare_to_wait(&mdev->misc_wait, &wait, TASK_UNINTERRUPTIBLE);
2504
 
                spin_unlock_irq(&mdev->req_lock);
2505
 
                schedule();
2506
 
                finish_wait(&mdev->misc_wait, &wait);
2507
 
                spin_lock_irq(&mdev->req_lock);
2508
 
        }
2509
 
        atomic_add(count, &mdev->ap_bio_cnt);
2510
 
        spin_unlock_irq(&mdev->req_lock);
 
2570
        wait_event(mdev->misc_wait, inc_ap_bio_cond(mdev, count));
2511
2571
}
2512
2572
 
2513
2573
static inline void dec_ap_bio(struct drbd_conf *mdev)
2527
2587
        }
2528
2588
}
2529
2589
 
2530
 
static inline void drbd_set_ed_uuid(struct drbd_conf *mdev, u64 val)
 
2590
static inline int drbd_set_ed_uuid(struct drbd_conf *mdev, u64 val)
2531
2591
{
 
2592
        int changed = mdev->ed_uuid != val;
2532
2593
        mdev->ed_uuid = val;
 
2594
        return changed;
2533
2595
}
2534
2596
 
2535
2597
static inline int seq_cmp(u32 a, u32 b)
2576
2638
        return QUEUE_ORDERED_NONE;
2577
2639
}
2578
2640
 
2579
 
/*
2580
 
 * FIXME investigate what makes most sense:
2581
 
 * a) blk_run_queue(q);
2582
 
 *
2583
 
 * b) struct backing_dev_info *bdi;
2584
 
 *    b1) bdi = &q->backing_dev_info;
2585
 
 *    b2) bdi = mdev->ldev->backing_bdev->bd_inode->i_mapping->backing_dev_info;
2586
 
 *    blk_run_backing_dev(bdi,NULL);
2587
 
 *
2588
 
 * c) generic_unplug(q) ? __generic_unplug(q) ?
2589
 
 *
2590
 
 * d) q->unplug_fn(q), which is what all the drivers/md/ stuff uses...
2591
 
 *
2592
 
 */
 
2641
#ifdef blk_queue_plugged
2593
2642
static inline void drbd_blk_run_queue(struct request_queue *q)
2594
2643
{
2595
2644
        if (q && q->unplug_fn)
2603
2652
                put_ldev(mdev);
2604
2653
        }
2605
2654
}
 
2655
#else
 
2656
static inline void drbd_blk_run_queue(struct request_queue *q)
 
2657
{
 
2658
}
 
2659
static inline void drbd_kick_lo(struct drbd_conf *mdev)
 
2660
{
 
2661
}
 
2662
#endif
2606
2663
 
2607
2664
static inline void drbd_md_flush(struct drbd_conf *mdev)
2608
2665
{
2611
2668
        if (test_bit(MD_NO_BARRIER, &mdev->flags))
2612
2669
                return;
2613
2670
 
2614
 
        r = blkdev_issue_flush(mdev->ldev->md_bdev, GFP_KERNEL, NULL,
2615
 
                        BLKDEV_IFL_WAIT);
 
2671
        r = blkdev_issue_flush(mdev->ldev->md_bdev, GFP_KERNEL, NULL);
2616
2672
        if (r) {
2617
2673
                set_bit(MD_NO_BARRIER, &mdev->flags);
2618
2674
                dev_err(DEV, "meta data flush failed with status %d, disabling md-flushes\n", r);