108
107
MODULE_DESCRIPTION("drbd - Distributed Replicated Block Device v" REL_VERSION);
109
108
MODULE_VERSION(REL_VERSION);
110
109
MODULE_LICENSE("GPL");
111
MODULE_PARM_DESC(minor_count, "Maximum number of drbd devices (1-255)");
110
MODULE_PARM_DESC(minor_count, "Maximum number of drbd devices ("
111
__stringify(DRBD_MINOR_COUNT_MIN) "-" __stringify(DRBD_MINOR_COUNT_MAX) ")");
112
112
MODULE_ALIAS_BLOCKDEV_MAJOR(DRBD_MAJOR);
114
114
#include <linux/moduleparam.h>
494
495
(os.conn == C_CONNECTED && ns.conn == C_VERIFY_S);
497
int drbd_change_state(struct drbd_conf *mdev, enum chg_state_flags f,
498
union drbd_state mask, union drbd_state val)
499
drbd_change_state(struct drbd_conf *mdev, enum chg_state_flags f,
500
union drbd_state mask, union drbd_state val)
500
502
#if DRBD_DEBUG_STATE_CHANGES
501
503
static unsigned long long sseq = 0x00f00000LLU;
536
538
drbd_change_state(mdev, CS_HARD, mask, val);
539
STATIC int is_valid_state(struct drbd_conf *mdev, union drbd_state ns);
540
STATIC int is_valid_state_transition(struct drbd_conf *,
541
union drbd_state, union drbd_state);
541
STATIC enum drbd_state_rv is_valid_state(struct drbd_conf *, union drbd_state);
542
STATIC enum drbd_state_rv is_valid_state_transition(struct drbd_conf *,
545
enum sanitize_state_warnings {
547
ABORTED_ONLINE_VERIFY,
549
CONNECTION_LOST_NEGOTIATING,
550
IMPLICITLY_UPGRADED_DISK,
551
IMPLICITLY_UPGRADED_PDSK,
542
553
STATIC union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state os,
543
union drbd_state ns, const char **warn_sync_abort);
554
union drbd_state ns, enum sanitize_state_warnings *warn);
544
555
int drbd_send_state_req(struct drbd_conf *,
545
556
union drbd_state, union drbd_state);
547
STATIC enum drbd_state_ret_codes _req_st_cond(struct drbd_conf *mdev,
548
union drbd_state mask, union drbd_state val)
558
STATIC enum drbd_state_rv
559
_req_st_cond(struct drbd_conf *mdev, union drbd_state mask,
560
union drbd_state val)
550
562
union drbd_state os, ns;
551
563
unsigned long flags;
564
enum drbd_state_rv rv;
554
566
if (test_and_clear_bit(CL_ST_CHG_SUCCESS, &mdev->flags))
555
567
return SS_CW_SUCCESS;
570
582
if (rv == SS_SUCCESS) {
571
583
rv = is_valid_state_transition(mdev, ns, os);
572
584
if (rv == SS_SUCCESS)
573
rv = 0; /* cont waiting, otherwise fail. */
585
rv = SS_UNKNOWN_ERROR; /* cont waiting, otherwise fail. */
576
588
spin_unlock_irqrestore(&mdev->req_lock, flags);
588
600
* Should not be called directly, use drbd_request_state() or
589
601
* _drbd_request_state().
591
STATIC int drbd_req_state(struct drbd_conf *mdev,
592
union drbd_state mask, union drbd_state val,
593
enum chg_state_flags f)
603
STATIC enum drbd_state_rv
604
drbd_req_state(struct drbd_conf *mdev, union drbd_state mask,
605
union drbd_state val, enum chg_state_flags f)
595
607
#if DRBD_DEBUG_STATE_CHANGES
596
608
static unsigned long long sseq = 0;
690
702
* Cousin of drbd_request_state(), useful with the CS_WAIT_COMPLETE
691
703
* flag, or when logging of failed state change requests is not desired.
693
int _drbd_request_state(struct drbd_conf *mdev, union drbd_state mask,
694
union drbd_state val, enum chg_state_flags f)
706
_drbd_request_state(struct drbd_conf *mdev, union drbd_state mask,
707
union drbd_state val, enum chg_state_flags f)
709
enum drbd_state_rv rv;
698
711
wait_event(mdev->state_wait,
699
712
(rv = drbd_req_state(mdev, mask, val, f)) != SS_IN_TRANSIENT_STATE);
757
void print_st_err(struct drbd_conf *mdev,
758
union drbd_state os, union drbd_state ns, int err)
770
void print_st_err(struct drbd_conf *mdev, union drbd_state os,
771
union drbd_state ns, enum drbd_state_rv err)
760
773
if (err == SS_IN_TRANSIENT_STATE)
768
781
#undef STATE_ARGS
770
#define drbd_peer_str drbd_role_str
771
#define drbd_pdsk_str drbd_disk_str
773
#define drbd_susp_str(A) ((A) ? "1" : "0")
774
#define drbd_aftr_isp_str(A) ((A) ? "1" : "0")
775
#define drbd_peer_isp_str(A) ((A) ? "1" : "0")
776
#define drbd_user_isp_str(A) ((A) ? "1" : "0")
779
({ if (ns.A != os.A) { \
780
pbp += sprintf(pbp, #A "( %s -> %s ) ", \
781
drbd_##A##_str(os.A), \
782
drbd_##A##_str(ns.A)); \
786
784
* is_valid_state() - Returns an SS_ error code if ns is not valid
787
785
* @mdev: DRBD device.
788
786
* @ns: State to consider.
790
STATIC int is_valid_state(struct drbd_conf *mdev, union drbd_state ns)
788
STATIC enum drbd_state_rv
789
is_valid_state(struct drbd_conf *mdev, union drbd_state ns)
792
791
/* See drbd_state_sw_errors in drbd_strings.c */
794
793
enum drbd_fencing_p fp;
794
enum drbd_state_rv rv = SS_SUCCESS;
797
796
fp = FP_DONT_CARE;
798
797
if (get_ldev(mdev)) {
855
857
* @ns: new state.
856
858
* @os: old state.
858
STATIC int is_valid_state_transition(struct drbd_conf *mdev,
859
union drbd_state ns, union drbd_state os)
860
STATIC enum drbd_state_rv
861
is_valid_state_transition(struct drbd_conf *mdev, union drbd_state ns,
864
enum drbd_state_rv rv = SS_SUCCESS;
863
866
if ((ns.conn == C_STARTING_SYNC_T || ns.conn == C_STARTING_SYNC_S) &&
864
867
os.conn > C_CONNECTED)
893
896
os.conn < C_CONNECTED)
894
897
rv = SS_NEED_CONNECTION;
899
if ((ns.conn == C_SYNC_TARGET || ns.conn == C_SYNC_SOURCE)
900
&& os.conn < C_WF_REPORT_PARAMS)
901
rv = SS_NEED_CONNECTION; /* No NetworkFailure -> SyncTarget etc... */
906
static void print_sanitize_warnings(struct drbd_conf *mdev, enum sanitize_state_warnings warn)
908
static const char *msg_table[] = {
910
[ABORTED_ONLINE_VERIFY] = "Online-verify aborted.",
911
[ABORTED_RESYNC] = "Resync aborted.",
912
[CONNECTION_LOST_NEGOTIATING] = "Connection lost while negotiating, no data!",
913
[IMPLICITLY_UPGRADED_DISK] = "Implicitly upgraded disk",
914
[IMPLICITLY_UPGRADED_PDSK] = "Implicitly upgraded pdsk",
917
if (warn != NO_WARNING)
918
dev_warn(DEV, "%s\n", msg_table[warn]);
900
922
* sanitize_state() - Resolves implicitly necessary additional changes to a state transition
901
923
* @mdev: DRBD device.
907
929
* to D_UNKNOWN. This rule and many more along those lines are in this function.
909
931
STATIC union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state os,
910
union drbd_state ns, const char **warn_sync_abort)
932
union drbd_state ns, enum sanitize_state_warnings *warn)
912
934
enum drbd_fencing_p fp;
935
enum drbd_disk_state disk_min, disk_max, pdsk_min, pdsk_max;
914
940
fp = FP_DONT_CARE;
915
941
if (get_ldev(mdev)) {
955
981
/* Abort resync if a disk fails/detaches */
956
982
if (os.conn > C_CONNECTED && ns.conn > C_CONNECTED &&
957
983
(ns.disk <= D_FAILED || ns.pdsk <= D_FAILED)) {
960
os.conn == C_VERIFY_S || os.conn == C_VERIFY_T ?
961
"Online-verify" : "Resync";
985
*warn = os.conn == C_VERIFY_S || os.conn == C_VERIFY_T ?
986
ABORTED_ONLINE_VERIFY : ABORTED_RESYNC;
962
987
ns.conn = C_CONNECTED;
965
if (ns.conn >= C_CONNECTED &&
966
((ns.disk == D_CONSISTENT || ns.disk == D_OUTDATED) ||
967
(ns.disk == D_NEGOTIATING && ns.conn == C_WF_BITMAP_T))) {
970
case C_PAUSED_SYNC_T:
971
ns.disk = D_OUTDATED;
976
case C_PAUSED_SYNC_S:
977
ns.disk = D_UP_TO_DATE;
980
ns.disk = D_INCONSISTENT;
981
dev_warn(DEV, "Implicitly set disk state Inconsistent!\n");
984
if (os.disk == D_OUTDATED && ns.disk == D_UP_TO_DATE)
985
dev_warn(DEV, "Implicitly set disk from Outdated to UpToDate\n");
988
if (ns.conn >= C_CONNECTED &&
989
(ns.pdsk == D_CONSISTENT || ns.pdsk == D_OUTDATED)) {
993
case C_PAUSED_SYNC_T:
995
ns.pdsk = D_UP_TO_DATE;
998
case C_PAUSED_SYNC_S:
999
/* remap any consistent state to D_OUTDATED,
1000
* but disallow "upgrade" of not even consistent states.
1003
(D_DISKLESS < os.pdsk && os.pdsk < D_OUTDATED)
1004
? os.pdsk : D_OUTDATED;
1007
ns.pdsk = D_INCONSISTENT;
1008
dev_warn(DEV, "Implicitly set pdsk Inconsistent!\n");
1011
if (os.pdsk == D_OUTDATED && ns.pdsk == D_UP_TO_DATE)
1012
dev_warn(DEV, "Implicitly set pdsk from Outdated to UpToDate\n");
1015
990
/* Connection breaks down before we finished "Negotiating" */
1016
991
if (ns.conn < C_CONNECTED && ns.disk == D_NEGOTIATING &&
1017
992
get_ldev_if_state(mdev, D_NEGOTIATING)) {
1019
994
ns.disk = mdev->new_state_tmp.disk;
1020
995
ns.pdsk = mdev->new_state_tmp.pdsk;
1022
dev_alert(DEV, "Connection lost while negotiating, no data!\n");
998
*warn = CONNECTION_LOST_NEGOTIATING;
1023
999
ns.disk = D_DISKLESS;
1024
1000
ns.pdsk = D_UNKNOWN;
1026
1002
put_ldev(mdev);
1005
/* D_CONSISTENT and D_OUTDATED vanish when we get connected */
1006
if (ns.conn >= C_CONNECTED && ns.conn < C_AHEAD) {
1007
if (ns.disk == D_CONSISTENT || ns.disk == D_OUTDATED)
1008
ns.disk = D_UP_TO_DATE;
1009
if (ns.pdsk == D_CONSISTENT || ns.pdsk == D_OUTDATED)
1010
ns.pdsk = D_UP_TO_DATE;
1013
/* Implications of the connection stat on the disk states */
1014
disk_min = D_DISKLESS;
1015
disk_max = D_UP_TO_DATE;
1016
pdsk_min = D_INCONSISTENT;
1017
pdsk_max = D_UNKNOWN;
1018
switch ((enum drbd_conns)ns.conn) {
1020
case C_PAUSED_SYNC_T:
1021
case C_STARTING_SYNC_T:
1022
case C_WF_SYNC_UUID:
1024
disk_min = D_INCONSISTENT;
1025
disk_max = D_OUTDATED;
1026
pdsk_min = D_UP_TO_DATE;
1027
pdsk_max = D_UP_TO_DATE;
1031
disk_min = D_UP_TO_DATE;
1032
disk_max = D_UP_TO_DATE;
1033
pdsk_min = D_UP_TO_DATE;
1034
pdsk_max = D_UP_TO_DATE;
1037
disk_min = D_DISKLESS;
1038
disk_max = D_UP_TO_DATE;
1039
pdsk_min = D_DISKLESS;
1040
pdsk_max = D_UP_TO_DATE;
1043
case C_PAUSED_SYNC_S:
1044
case C_STARTING_SYNC_S:
1046
disk_min = D_UP_TO_DATE;
1047
disk_max = D_UP_TO_DATE;
1048
pdsk_min = D_INCONSISTENT;
1049
pdsk_max = D_CONSISTENT; /* D_OUTDATED would be nice. But explicit outdate necessary*/
1052
disk_min = D_INCONSISTENT;
1053
disk_max = D_INCONSISTENT;
1054
pdsk_min = D_UP_TO_DATE;
1055
pdsk_max = D_UP_TO_DATE;
1058
disk_min = D_UP_TO_DATE;
1059
disk_max = D_UP_TO_DATE;
1060
pdsk_min = D_INCONSISTENT;
1061
pdsk_max = D_INCONSISTENT;
1064
case C_DISCONNECTING:
1068
case C_NETWORK_FAILURE:
1069
case C_PROTOCOL_ERROR:
1071
case C_WF_CONNECTION:
1072
case C_WF_REPORT_PARAMS:
1076
if (ns.disk > disk_max)
1079
if (ns.disk < disk_min) {
1081
*warn = IMPLICITLY_UPGRADED_DISK;
1084
if (ns.pdsk > pdsk_max)
1087
if (ns.pdsk < pdsk_min) {
1089
*warn = IMPLICITLY_UPGRADED_PDSK;
1029
1093
if (fp == FP_STONITH &&
1030
1094
(ns.role == R_PRIMARY && ns.conn < C_CONNECTED && ns.pdsk > D_OUTDATED) &&
1031
1095
!(os.role == R_PRIMARY && os.conn < C_CONNECTED && os.pdsk > D_OUTDATED))
1054
1118
/* helper for __drbd_set_state */
1055
1119
static void set_ov_position(struct drbd_conf *mdev, enum drbd_conns cs)
1121
if (mdev->agreed_pro_version < 90)
1122
mdev->ov_start_sector = 0;
1123
mdev->rs_total = drbd_bm_bits(mdev);
1124
mdev->ov_position = 0;
1057
1125
if (cs == C_VERIFY_T) {
1058
1126
/* starting online verify from an arbitrary position
1059
1127
* does not fit well into the existing protocol.
1063
1131
mdev->ov_start_sector = ~(sector_t)0;
1065
1133
unsigned long bit = BM_SECT_TO_BIT(mdev->ov_start_sector);
1066
if (bit >= mdev->rs_total)
1134
if (bit >= mdev->rs_total) {
1067
1135
mdev->ov_start_sector =
1068
1136
BM_BIT_TO_SECT(mdev->rs_total - 1);
1139
mdev->rs_total -= bit;
1069
1140
mdev->ov_position = mdev->ov_start_sector;
1142
mdev->ov_left = mdev->rs_total;
1073
1145
static void drbd_resume_al(struct drbd_conf *mdev)
1086
1158
* Caller needs to hold req_lock, and global_state_lock. Do not call directly.
1088
int __drbd_set_state(struct drbd_conf *mdev,
1089
union drbd_state ns, enum chg_state_flags flags,
1090
struct completion *done)
1161
__drbd_set_state(struct drbd_conf *mdev, union drbd_state ns,
1162
enum chg_state_flags flags, struct completion *done)
1092
1164
#if DRBD_DEBUG_STATE_CHANGES
1093
1165
static unsigned long long sseq = 0xff000000LLU;
1095
1167
union drbd_state os;
1096
int rv = SS_SUCCESS;
1097
const char *warn_sync_abort = NULL;
1168
enum drbd_state_rv rv = SS_SUCCESS;
1169
enum sanitize_state_warnings ssw;
1098
1170
struct after_state_chg_work *ascw;
1111
ns = sanitize_state(mdev, os, ns, &warn_sync_abort);
1183
ns = sanitize_state(mdev, os, ns, &ssw);
1113
1185
#if DRBD_DEBUG_STATE_CHANGES
1114
1186
drbd_state_dbg(mdev, ns.seq, ns.func, ns.line, "=>ns", ns);
1141
if (warn_sync_abort)
1142
dev_warn(DEV, "%s aborted.\n", warn_sync_abort);
1213
print_sanitize_warnings(mdev, ssw);
1144
1215
#if DUMP_MD >= 2
1146
1217
char *pbp, pb[300];
1220
if (ns.role != os.role)
1221
pbp += sprintf(pbp, "role( %s -> %s ) ",
1222
drbd_role_str(os.role),
1223
drbd_role_str(ns.role));
1224
if (ns.peer != os.peer)
1225
pbp += sprintf(pbp, "peer( %s -> %s ) ",
1226
drbd_role_str(os.peer),
1227
drbd_role_str(ns.peer));
1228
if (ns.conn != os.conn)
1229
pbp += sprintf(pbp, "conn( %s -> %s ) ",
1230
drbd_conn_str(os.conn),
1231
drbd_conn_str(ns.conn));
1232
if (ns.disk != os.disk)
1233
pbp += sprintf(pbp, "disk( %s -> %s ) ",
1234
drbd_disk_str(os.disk),
1235
drbd_disk_str(ns.disk));
1236
if (ns.pdsk != os.pdsk)
1237
pbp += sprintf(pbp, "pdsk( %s -> %s ) ",
1238
drbd_disk_str(os.pdsk),
1239
drbd_disk_str(ns.pdsk));
1154
1240
if (is_susp(ns) != is_susp(os))
1155
pbp += sprintf(pbp, "susp( %s -> %s ) ",
1156
drbd_susp_str(is_susp(os)),
1157
drbd_susp_str(is_susp(ns)));
1241
pbp += sprintf(pbp, "susp( %d -> %d ) ",
1244
if (ns.aftr_isp != os.aftr_isp)
1245
pbp += sprintf(pbp, "aftr_isp( %d -> %d ) ",
1248
if (ns.peer_isp != os.peer_isp)
1249
pbp += sprintf(pbp, "peer_isp( %d -> %d ) ",
1252
if (ns.user_isp != os.user_isp)
1253
pbp += sprintf(pbp, "user_isp( %d -> %d ) ",
1161
1256
dev_info(DEV, "%s\n", pb);
1191
1286
/* assignment inclusive debug info about what code path
1192
1287
* initiated this state change. */
1193
1288
mdev->state = ns;
1290
if (os.disk == D_ATTACHING && ns.disk >= D_NEGOTIATING)
1291
drbd_print_uuids(mdev, "attached to UUIDs");
1194
1293
wake_up(&mdev->misc_wait);
1195
1294
wake_up(&mdev->state_wait);
1198
1297
if ((os.conn == C_VERIFY_S || os.conn == C_VERIFY_T) &&
1199
1298
ns.conn < C_CONNECTED) {
1200
1299
mdev->ov_start_sector =
1201
BM_BIT_TO_SECT(mdev->rs_total - mdev->ov_left);
1300
BM_BIT_TO_SECT(drbd_bm_bits(mdev) - mdev->ov_left);
1202
1301
dev_info(DEV, "Online Verify reached sector %llu\n",
1203
1302
(unsigned long long)mdev->ov_start_sector);
1223
1322
unsigned long now = jiffies;
1226
mdev->ov_position = 0;
1227
mdev->rs_total = drbd_bm_bits(mdev);
1228
if (mdev->agreed_pro_version >= 90)
1229
set_ov_position(mdev, ns.conn);
1231
mdev->ov_start_sector = 0;
1232
mdev->ov_left = mdev->rs_total
1233
- BM_SECT_TO_BIT(mdev->ov_position);
1325
set_ov_position(mdev, ns.conn);
1234
1326
mdev->rs_start = now;
1235
1327
mdev->rs_last_events = 0;
1236
1328
mdev->rs_last_sect_ev = 0;
1238
1330
mdev->ov_last_oos_start = 0;
1240
1332
for (i = 0; i < DRBD_SYNC_MARKS; i++) {
1241
mdev->rs_mark_left[i] = mdev->rs_total;
1333
mdev->rs_mark_left[i] = mdev->ov_left;
1242
1334
mdev->rs_mark_time[i] = now;
1337
drbd_rs_controller_reset(mdev);
1245
1339
if (ns.conn == C_VERIFY_S) {
1246
1340
dev_info(DEV, "Starting Online Verify from sector %llu\n",
1247
1341
(unsigned long long)mdev->ov_position);
1442
int drbd_bitmap_io_from_worker(struct drbd_conf *mdev,
1443
int (*io_fn)(struct drbd_conf *),
1444
char *why, enum bm_flag flags)
1448
D_ASSERT(current == mdev->worker.task);
1450
/* open coded non-blocking drbd_suspend_io(mdev); */
1451
set_bit(SUSPEND_IO, &mdev->flags);
1453
drbd_bm_lock(mdev, why, flags);
1455
drbd_bm_unlock(mdev);
1457
drbd_resume_io(mdev);
1349
1463
* after_state_ch() - Perform after state change actions that may sleep
1350
1464
* @mdev: DRBD device.
1392
1506
if (ns.susp_nod) {
1393
if (os.conn < C_CONNECTED && ns.conn >= C_CONNECTED) {
1394
if (ns.conn == C_CONNECTED)
1395
what = resend, nsm.susp_nod = 0;
1396
else /* ns.conn > C_CONNECTED */
1397
dev_err(DEV, "Unexpected Resynd going on!\n");
1507
if (os.conn < C_CONNECTED && ns.conn >= C_CONNECTED)
1400
1510
if (os.disk == D_ATTACHING && ns.disk > D_ATTACHING)
1401
what = restart_frozen_disk_io, nsm.susp_nod = 0;
1511
what = restart_frozen_disk_io;
1513
if (what != nothing)
1405
1517
if (ns.susp_fen) {
1430
1542
spin_unlock_irq(&mdev->req_lock);
1545
/* Became sync source. With protocol >= 96, we still need to send out
1546
* the sync uuid now. Need to do that before any drbd_send_state, or
1547
* the other side may go "paused sync" before receiving the sync uuids,
1548
* which is unexpected. */
1549
if ((os.conn != C_SYNC_SOURCE && os.conn != C_PAUSED_SYNC_S) &&
1550
(ns.conn == C_SYNC_SOURCE || ns.conn == C_PAUSED_SYNC_S) &&
1551
mdev->agreed_pro_version >= 96 && get_ldev(mdev)) {
1552
drbd_gen_and_send_sync_uuid(mdev);
1433
1556
/* Do not change the order of the if above and the two below... */
1434
1557
if (os.pdsk == D_DISKLESS && ns.pdsk > D_DISKLESS) { /* attach on the peer */
1435
1558
drbd_send_uuids(mdev);
1436
1559
drbd_send_state(mdev);
1438
if (os.conn != C_WF_BITMAP_S && ns.conn == C_WF_BITMAP_S)
1439
drbd_queue_bitmap_io(mdev, &drbd_send_bitmap, NULL, "send_bitmap (WFBitMapS)");
1561
/* No point in queuing send_bitmap if we don't have a connection
1562
* anymore, so check also the _current_ state, not only the new state
1563
* at the time this work was queued. */
1564
if (os.conn != C_WF_BITMAP_S && ns.conn == C_WF_BITMAP_S &&
1565
mdev->state.conn == C_WF_BITMAP_S)
1566
drbd_queue_bitmap_io(mdev, &drbd_send_bitmap, NULL,
1567
"send_bitmap (WFBitMapS)",
1568
BM_LOCKED_TEST_ALLOWED);
1441
1570
/* Lost contact to peer's copy of the data */
1442
1571
if ((os.pdsk >= D_INCONSISTENT &&
1468
1597
/* D_DISKLESS Peer becomes secondary */
1469
1598
if (os.peer == R_PRIMARY && ns.peer == R_SECONDARY)
1470
drbd_al_to_on_disk_bm(mdev);
1599
/* We may still be Primary ourselves.
1600
* No harm done if the bitmap still changes,
1601
* redirtied pages will follow later. */
1602
drbd_bitmap_io_from_worker(mdev, &drbd_bm_write,
1603
"demote diskless peer", BM_LOCKED_SET_ALLOWED);
1607
/* Write out all changed bits on demote.
1608
* Though, no need to da that just yet
1609
* if there is a resync going on still */
1610
if (os.role == R_PRIMARY && ns.role == R_SECONDARY &&
1611
mdev->state.conn <= C_CONNECTED && get_ldev(mdev)) {
1612
/* No changes to the bitmap expected this time, so assert that,
1613
* even though no harm was done if it did change. */
1614
drbd_bitmap_io_from_worker(mdev, &drbd_bm_write,
1615
"demote", BM_LOCKED_TEST_ALLOWED);
1471
1616
put_ldev(mdev);
1495
1640
if (os.conn == C_WF_REPORT_PARAMS && ns.conn >= C_CONNECTED)
1496
1641
drbd_send_state(mdev);
1643
if (os.conn != C_AHEAD && ns.conn == C_AHEAD)
1644
drbd_send_state(mdev);
1498
1646
/* We are in the progress to start a full sync... */
1499
1647
if ((os.conn != C_STARTING_SYNC_T && ns.conn == C_STARTING_SYNC_T) ||
1500
1648
(os.conn != C_STARTING_SYNC_S && ns.conn == C_STARTING_SYNC_S))
1501
drbd_queue_bitmap_io(mdev, &drbd_bmio_set_n_write, &abw_start_sync, "set_n_write from StartingSync");
1649
/* no other bitmap changes expected during this phase */
1650
drbd_queue_bitmap_io(mdev,
1651
&drbd_bmio_set_n_write, &abw_start_sync,
1652
"set_n_write from StartingSync", BM_LOCKED_TEST_ALLOWED);
1503
1654
/* We are invalidating our self... */
1504
1655
if (os.conn < C_CONNECTED && ns.conn < C_CONNECTED &&
1505
1656
os.disk > D_INCONSISTENT && ns.disk == D_INCONSISTENT)
1506
drbd_queue_bitmap_io(mdev, &drbd_bmio_set_n_write, NULL, "set_n_write from invalidate");
1657
/* other bitmap operation expected during this phase */
1658
drbd_queue_bitmap_io(mdev, &drbd_bmio_set_n_write, NULL,
1659
"set_n_write from invalidate", BM_LOCKED_MASK);
1508
1661
/* first half of local IO error, failure to attach,
1509
1662
* or administrative detach */
1525
1678
drbd_disk_str(mdev->state.disk));
1527
1680
if (drbd_send_state(mdev))
1528
dev_warn(DEV, "Notified peer that I am detaching my disk\n");
1530
dev_err(DEV, "Sending state for detaching disk failed\n");
1681
dev_info(DEV, "Notified peer that I am detaching my disk\n");
1532
1683
drbd_rs_cancel_all(mdev);
1557
1708
atomic_set(&mdev->rs_pending_cnt, 0);
1559
1710
if (drbd_send_state(mdev))
1560
dev_warn(DEV, "Notified peer that I'm now diskless.\n");
1562
dev_err(DEV, "Sending state for being diskless failed\n");
1711
dev_info(DEV, "Notified peer that I'm now diskless.\n");
1563
1712
/* corresponding get_ldev in __drbd_set_state
1564
* this may finaly trigger drbd_ldev_destroy. */
1713
* this may finally trigger drbd_ldev_destroy. */
1565
1714
put_ldev(mdev);
1717
/* Notify peer that I had a local IO error, and did not detached.. */
1718
if (os.disk == D_UP_TO_DATE && ns.disk == D_INCONSISTENT)
1719
drbd_send_state(mdev);
1568
1721
/* Disks got bigger while they were detached */
1569
1722
if (ns.disk > D_NEGOTIATING && ns.pdsk > D_NEGOTIATING &&
1570
1723
test_and_clear_bit(RESYNC_AFTER_NEG, &mdev->flags)) {
1583
1736
if (os.disk < D_UP_TO_DATE && os.conn >= C_SYNC_SOURCE && ns.conn == C_CONNECTED)
1584
1737
drbd_send_state(mdev);
1739
/* This triggers bitmap writeout of potentially still unwritten pages
1740
* if the resync finished cleanly, or aborted because of peer disk
1741
* failure, or because of connection loss.
1742
* For resync aborted because of local disk failure, we cannot do
1743
* any bitmap writeout anymore.
1744
* No harm done if some bits change during this phase.
1746
if (os.conn > C_CONNECTED && ns.conn <= C_CONNECTED && get_ldev(mdev)) {
1747
drbd_queue_bitmap_io(mdev, &drbd_bm_write, NULL,
1748
"write from resync_finished", BM_LOCKED_SET_ALLOWED);
1586
1752
/* free tl_hash if we Got thawed and are C_STANDALONE */
1587
1753
if (ns.conn == C_STANDALONE && !is_susp(ns) && mdev->tl_hash)
1588
1754
drbd_free_tl_hash(mdev);
1867
2033
sent = drbd_send(mdev, sock, h, size, msg_flags);
1869
2035
ok = (sent == size);
1871
dev_err(DEV, "short sent %s size=%d sent=%d\n",
2036
if (!ok && !signal_pending(current))
2037
dev_warn(DEV, "short sent %s size=%d sent=%d\n",
1872
2038
cmdname(cmd), (int)size, sent);
2053
2219
return _drbd_send_uuids(mdev, 8);
2222
void drbd_print_uuids(struct drbd_conf *mdev, const char *text)
2224
if (get_ldev_if_state(mdev, D_NEGOTIATING)) {
2225
u64 *uuid = mdev->ldev->md.uuid;
2226
dev_info(DEV, "%s %016llX:%016llX:%016llX:%016llX\n",
2228
(unsigned long long)uuid[UI_CURRENT],
2229
(unsigned long long)uuid[UI_BITMAP],
2230
(unsigned long long)uuid[UI_HISTORY_START],
2231
(unsigned long long)uuid[UI_HISTORY_END]);
2234
dev_info(DEV, "%s effective data uuid: %016llX\n",
2236
(unsigned long long)mdev->ed_uuid);
2057
int drbd_send_sync_uuid(struct drbd_conf *mdev, u64 val)
2240
int drbd_gen_and_send_sync_uuid(struct drbd_conf *mdev)
2059
2242
struct p_rs_uuid p;
2061
p.uuid = cpu_to_be64(val);
2245
D_ASSERT(mdev->state.disk == D_UP_TO_DATE);
2247
uuid = mdev->ldev->md.uuid[UI_BITMAP] + UUID_NEW_BM_OFFSET;
2248
drbd_uuid_set(mdev, UI_BITMAP, uuid);
2249
drbd_print_uuids(mdev, "updated sync UUID");
2251
p.uuid = cpu_to_be64(uuid);
2063
2253
return drbd_send_cmd(mdev, USE_DATA_SOCKET, P_SYNC_UUID,
2064
2254
(struct p_header80 *)&p, sizeof(p));
2076
2266
d_size = drbd_get_max_capacity(mdev->ldev);
2077
2267
u_size = mdev->ldev->dc.disk_size;
2078
2268
q_order_type = drbd_queue_order_type(mdev);
2269
max_bio_size = queue_max_hw_sectors(mdev->ldev->backing_bdev->bd_disk->queue) << 9;
2270
max_bio_size = min_t(int, max_bio_size, DRBD_MAX_BIO_SIZE);
2079
2271
put_ldev(mdev);
2083
2275
q_order_type = QUEUE_ORDERED_NONE;
2276
max_bio_size = DRBD_MAX_BIO_SIZE; /* ... multiple BIOs per peer_request */
2086
2279
p.d_size = cpu_to_be64(d_size);
2087
2280
p.u_size = cpu_to_be64(u_size);
2088
2281
p.c_size = cpu_to_be64(trigger_reply ? 0 : drbd_get_capacity(mdev->this_bdev));
2089
p.max_segment_size = cpu_to_be32(queue_max_segment_size(mdev->rq_queue));
2282
p.max_bio_size = cpu_to_be32(max_bio_size);
2090
2283
p.queue_order_type = cpu_to_be16(q_order_type);
2091
2284
p.dds_flags = cpu_to_be16(flags);
2138
2331
(struct p_header80 *)&p, sizeof(p));
2141
int drbd_send_sr_reply(struct drbd_conf *mdev, int retcode)
2334
int drbd_send_sr_reply(struct drbd_conf *mdev, enum drbd_state_rv retcode)
2143
2336
struct p_req_state_reply p;
2245
enum { OK, FAILED, DONE }
2439
* send_bitmap_rle_or_plain
2441
* Return 0 when done, 1 when another iteration is needed, and a negative error
2442
* code upon failure.
2246
2445
send_bitmap_rle_or_plain(struct drbd_conf *mdev,
2247
struct p_header80 *h, struct bm_xfer_ctx *c)
2446
struct p_header80 *h, struct bm_xfer_ctx *c)
2249
2448
struct p_compressed_bm *p = (void*)h;
2250
2449
unsigned long num_words;
2284
2483
if (c->bit_offset > c->bm_bits)
2285
2484
c->bit_offset = c->bm_bits;
2287
ok = ok ? ((len == 0) ? DONE : OK) : FAILED;
2290
INFO_bm_xfer_stats(mdev, "send", c);
2488
INFO_bm_xfer_stats(mdev, "send", c);
2294
2496
/* See the comment at receive_bitmap() */
2297
2499
struct bm_xfer_ctx c;
2298
2500
struct p_header80 *p;
2301
ERR_IF(!mdev->bitmap) return FALSE;
2503
ERR_IF(!mdev->bitmap) return false;
2303
2505
/* maybe we should use some per thread scratch page,
2304
2506
* and allocate that during initial device creation? */
2305
2507
p = (struct p_header80 *) __get_free_page(GFP_NOIO);
2307
2509
dev_err(DEV, "failed to allocate one page buffer in %s\n", __func__);
2311
2513
if (get_ldev(mdev)) {
2334
ret = send_bitmap_rle_or_plain(mdev, p, &c);
2335
} while (ret == OK);
2536
err = send_bitmap_rle_or_plain(mdev, p, &c);
2337
2539
free_page((unsigned long) p);
2338
return (ret == DONE);
2341
2543
int drbd_send_bitmap(struct drbd_conf *mdev)
2358
2560
p.set_size = cpu_to_be32(set_size);
2360
2562
if (mdev->state.conn < C_CONNECTED)
2362
2564
ok = drbd_send_cmd(mdev, USE_META_SOCKET, P_BARRIER_ACK,
2363
2565
(struct p_header80 *)&p, sizeof(p));
2386
2588
p.seq_num = cpu_to_be32(atomic_add_return(1, &mdev->packet_seq));
2388
2590
if (!mdev->meta.socket || mdev->state.conn < C_CONNECTED)
2390
2592
ok = drbd_send_cmd(mdev, USE_META_SOCKET, cmd,
2391
2593
(struct p_header80 *)&p, sizeof(p));
2494
2696
/* called on sndtimeo
2495
* returns FALSE if we should retry,
2496
* TRUE if we think connection is dead
2697
* returns false if we should retry,
2698
* true if we think connection is dead
2498
2700
STATIC int we_should_drop_the_connection(struct drbd_conf *mdev, struct socket *sock)
2845
/* see also wire_flags_to_bio()
2846
* DRBD_REQ_*, because we need to semantically map the flags to data packet
2847
* flags and back. We may replicate to other kernel versions. */
2643
2848
static u32 bio_flags_to_wire(struct drbd_conf *mdev, unsigned long bi_rw)
2645
2850
if (mdev->agreed_pro_version >= 95)
2646
return (bi_rw & REQ_SYNC ? (DP_RW_SYNC | DP_BCOMP_UNPLUG): 0) |
2647
(bi_rw & REQ_UNPLUG ? DP_UNPLUG : 0) |
2648
(bi_rw & REQ_FUA ? DP_FUA : 0) |
2649
(bi_rw & REQ_FLUSH ? DP_FLUSH : 0) |
2650
(bi_rw & REQ_DISCARD ? DP_DISCARD : 0);
2652
return bi_rw & (REQ_SYNC | REQ_UNPLUG) ? DP_RW_SYNC : 0;
2851
return (bi_rw & DRBD_REQ_SYNC ? DP_RW_SYNC : 0) |
2852
(bi_rw & DRBD_REQ_UNPLUG ? DP_UNPLUG : 0) |
2853
(bi_rw & DRBD_REQ_FUA ? DP_FUA : 0) |
2854
(bi_rw & DRBD_REQ_FLUSH ? DP_FLUSH : 0) |
2855
(bi_rw & DRBD_REQ_DISCARD ? DP_DISCARD : 0);
2857
/* else: we used to communicate one bit only in older DRBD */
2858
return bi_rw & (DRBD_REQ_SYNC | DRBD_REQ_UNPLUG) ? DP_RW_SYNC : 0;
2655
2861
/* Used to send write requests
2699
2905
if (ok && dgs) {
2700
2906
dgb = mdev->int_dig_out;
2701
2907
drbd_csum_bio(mdev, mdev->integrity_w_tfm, req->master_bio, dgb);
2702
ok = drbd_send(mdev, mdev->data.socket, dgb, dgs, 0);
2908
ok = dgs == drbd_send(mdev, mdev->data.socket, dgb, dgs, 0);
2705
if (mdev->net_conf->wire_protocol == DRBD_PROT_A)
2911
/* For protocol A, we have to memcpy the payload into
2912
* socket buffers, as we may complete right away
2913
* as soon as we handed it over to tcp, at which point the data
2914
* pages may become invalid.
2916
* For data-integrity enabled, we copy it as well, so we can be
2917
* sure that even if the bio pages may still be modified, it
2918
* won't change the data on the wire, thus if the digest checks
2919
* out ok after sending on this side, but does not fit on the
2920
* receiving side, we sure have detected corruption elsewhere.
2922
if (mdev->net_conf->wire_protocol == DRBD_PROT_A || dgs)
2706
2923
ok = _drbd_send_bio(mdev, req->master_bio);
2708
2925
ok = _drbd_send_zc_bio(mdev, req->master_bio);
2927
/* double check digest, sometimes buffers have been modified in flight. */
2928
if (dgs > 0 && dgs <= 64) {
2929
/* 64 byte, 512 bit, is the largest digest size
2930
* currently supported in kernel crypto. */
2931
unsigned char digest[64];
2932
drbd_csum_bio(mdev, mdev->integrity_w_tfm, req->master_bio, digest);
2933
if (memcmp(mdev->int_dig_out, digest, dgs)) {
2935
"Digest mismatch, buffer modified by upper layers during write: %llus +%u\n",
2936
(unsigned long long)req->sector, req->size);
2938
} /* else if (dgs > 64) {
2939
... Be noisy about digest too large ...
2711
2943
drbd_put_data_sock(mdev);
2756
2988
if (ok && dgs) {
2757
2989
dgb = mdev->int_dig_out;
2758
2990
drbd_csum_ee(mdev, mdev->integrity_w_tfm, e, dgb);
2759
ok = drbd_send(mdev, mdev->data.socket, dgb, dgs, 0);
2991
ok = dgs == drbd_send(mdev, mdev->data.socket, dgb, dgs, 0);
2762
2994
ok = _drbd_send_zc_ee(mdev, e);
3001
int drbd_send_oos(struct drbd_conf *mdev, struct drbd_request *req)
3003
struct p_block_desc p;
3005
p.sector = cpu_to_be64(req->sector);
3006
p.blksize = cpu_to_be32(req->size);
3008
return drbd_send_cmd(mdev, USE_DATA_SOCKET, P_OUT_OF_SYNC, &p.head, sizeof(p));
2770
3012
drbd_send distinguishes two cases:
3027
3271
atomic_set(&mdev->pp_in_use_by_net, 0);
3028
3272
atomic_set(&mdev->rs_sect_in, 0);
3029
3273
atomic_set(&mdev->rs_sect_ev, 0);
3274
atomic_set(&mdev->ap_in_flight, 0);
3031
3276
mutex_init(&mdev->md_io_mutex);
3032
3277
mutex_init(&mdev->data.mutex);
3055
3300
INIT_LIST_HEAD(&mdev->unplug_work.list);
3056
3301
INIT_LIST_HEAD(&mdev->go_diskless.list);
3057
3302
INIT_LIST_HEAD(&mdev->md_sync_work.list);
3303
INIT_LIST_HEAD(&mdev->start_resync_work.list);
3058
3304
INIT_LIST_HEAD(&mdev->bm_io_work.w.list);
3060
mdev->resync_work.cb = w_resync_inactive;
3306
mdev->resync_work.cb = w_resync_timer;
3061
3307
mdev->unplug_work.cb = w_send_write_hint;
3062
3308
mdev->go_diskless.cb = w_go_diskless;
3063
3309
mdev->md_sync_work.cb = w_md_sync;
3064
3310
mdev->bm_io_work.w.cb = w_bitmap_io;
3311
mdev->start_resync_work.cb = w_start_resync;
3065
3312
init_timer(&mdev->resync_timer);
3066
3313
init_timer(&mdev->md_sync_timer);
3314
init_timer(&mdev->start_resync_timer);
3315
init_timer(&mdev->request_timer);
3067
3316
mdev->resync_timer.function = resync_timer_fn;
3068
3317
mdev->resync_timer.data = (unsigned long) mdev;
3069
3318
mdev->md_sync_timer.function = md_sync_timer_fn;
3070
3319
mdev->md_sync_timer.data = (unsigned long) mdev;
3320
mdev->start_resync_timer.function = start_resync_timer_fn;
3321
mdev->start_resync_timer.data = (unsigned long) mdev;
3322
mdev->request_timer.function = request_timer_fn;
3323
mdev->request_timer.data = (unsigned long) mdev;
3072
3325
init_waitqueue_head(&mdev->misc_wait);
3073
3326
init_waitqueue_head(&mdev->state_wait);
3083
3336
mdev->agreed_pro_version = PRO_VERSION_MAX;
3084
3337
mdev->write_ordering = WO_bio_barrier;
3085
3338
mdev->resync_wenr = LC_FREE;
3339
mdev->peer_max_bio_size = DRBD_MAX_BIO_SIZE_SAFE;
3340
mdev->local_max_bio_size = DRBD_MAX_BIO_SIZE_SAFE;
3088
3343
void drbd_mdev_cleanup(struct drbd_conf *mdev)
3345
3602
unregister_reboot_notifier(&drbd_notifier);
3604
/* first remove proc,
3605
* drbdsetup uses it's presence to detect
3606
* whether DRBD is loaded.
3607
* If we would get stuck in proc removal,
3608
* but have netlink already deregistered,
3609
* some drbdsetup commands may wait forever
3613
remove_proc_entry("drbd", NULL);
3347
3615
drbd_nl_cleanup();
3349
3617
if (minor_table) {
3351
remove_proc_entry("drbd", NULL);
3352
3618
i = minor_count;
3354
3620
drbd_delete_device(i);
3445
3711
q->backing_dev_info.congested_fn = drbd_congested;
3446
3712
q->backing_dev_info.congested_data = mdev;
3448
blk_queue_make_request(q, drbd_make_request_26);
3449
blk_queue_max_segment_size(q, DRBD_MAX_SEGMENT_SIZE);
3714
blk_queue_make_request(q, drbd_make_request);
3715
/* Setting the max_hw_sectors to an odd value of 8kibyte here
3716
This triggers a max_bio_size message upon first attach or connect */
3717
blk_queue_max_hw_sectors(q, DRBD_MAX_BIO_SIZE_SAFE >> 8);
3450
3718
blk_queue_bounce_limit(q, BLK_BOUNCE_ANY);
3451
3719
blk_queue_merge_bvec(q, drbd_merge_bvec);
3452
3720
q->queue_lock = &mdev->req_lock; /* needed since we use */
3721
#ifdef blk_queue_plugged
3453
3722
/* plugging on a queue, that actually has no requests! */
3454
3723
q->unplug_fn = drbd_unplug_fn;
3456
3726
mdev->md_io_page = alloc_page(GFP_KERNEL);
3457
3727
if (!mdev->md_io_page)
3599
3870
if (ldev == NULL)
3602
bd_release(ldev->backing_bdev);
3603
bd_release(ldev->md_bdev);
3605
fput(ldev->lo_file);
3606
fput(ldev->md_file);
3873
blkdev_put(ldev->backing_bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
3874
blkdev_put(ldev->md_bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
3611
3880
void drbd_free_sock(struct drbd_conf *mdev)
3613
3882
if (mdev->data.socket) {
3705
3975
buffer->device_uuid = cpu_to_be64(mdev->ldev->md.device_uuid);
3707
3977
buffer->bm_offset = cpu_to_be32(mdev->ldev->md.bm_offset);
3978
buffer->la_peer_max_bio_size = cpu_to_be32(mdev->peer_max_bio_size);
3709
3980
D_ASSERT(drbd_md_ss__(mdev, mdev->ldev) == mdev->ldev->md.md_offset);
3710
3981
sector = mdev->ldev->md.md_offset;
3712
3983
if (!drbd_md_sync_page_io(mdev, mdev->ldev, sector, WRITE)) {
3713
3984
/* this was a try anyways ... */
3714
3985
dev_err(DEV, "meta data update failed!\n");
3715
drbd_chk_io_error(mdev, 1, TRUE);
3986
drbd_chk_io_error(mdev, 1, true);
3718
3989
/* Update mdev->ldev->md.la_size_sect,
3728
3999
* @mdev: DRBD device.
3729
4000
* @bdev: Device from which the meta data should be read in.
3731
* Return 0 (NO_ERROR) on success, and an enum drbd_ret_codes in case
4002
* Return 0 (NO_ERROR) on success, and an enum drbd_ret_code in case
3732
4003
* something goes wrong. Currently only: ERR_IO_MD_DISK, ERR_MD_INVALID.
3734
4005
int drbd_md_read(struct drbd_conf *mdev, struct drbd_backing_dev *bdev)
3745
4016
buffer = (struct meta_data_on_disk *)page_address(mdev->md_io_page);
3747
4018
if (!drbd_md_sync_page_io(mdev, bdev, bdev->md.md_offset, READ)) {
3748
/* NOTE: cant do normal error processing here as this is
4019
/* NOTE: can't do normal error processing here as this is
3749
4020
called BEFORE disk is attached */
3750
4021
dev_err(DEV, "Error while reading metadata.\n");
3751
4022
rv = ERR_IO_MD_DISK;
3790
4061
mdev->sync_conf.al_extents = be32_to_cpu(buffer->al_nr_extents);
3791
4062
bdev->md.device_uuid = be64_to_cpu(buffer->device_uuid);
4064
spin_lock_irq(&mdev->req_lock);
4065
if (mdev->state.conn < C_CONNECTED) {
4067
peer = be32_to_cpu(buffer->la_peer_max_bio_size);
4068
peer = max_t(int, peer, DRBD_MAX_BIO_SIZE_SAFE);
4069
mdev->peer_max_bio_size = peer;
4071
spin_unlock_irq(&mdev->req_lock);
3793
4073
if (mdev->sync_conf.al_extents < 7)
3794
4074
mdev->sync_conf.al_extents = 127;
3803
static void debug_drbd_uuid(struct drbd_conf *mdev, enum drbd_uuid_index index)
3805
static char *uuid_str[UI_EXTENDED_SIZE] = {
3806
[UI_CURRENT] = "CURRENT",
3807
[UI_BITMAP] = "BITMAP",
3808
[UI_HISTORY_START] = "HISTORY_START",
3809
[UI_HISTORY_END] = "HISTORY_END",
3811
[UI_FLAGS] = "FLAGS",
3814
if (index >= UI_EXTENDED_SIZE) {
3815
dev_warn(DEV, " uuid_index >= EXTENDED_SIZE\n");
3819
dynamic_dev_dbg(DEV, " uuid[%s] now %016llX\n",
3821
(unsigned long long)mdev->ldev->md.uuid[index]);
3826
4084
* drbd_md_mark_dirty() - Mark meta data super block as dirty
3827
4085
* @mdev: DRBD device.
3850
STATIC void drbd_uuid_move_history(struct drbd_conf *mdev) __must_hold(local)
4108
static void drbd_uuid_move_history(struct drbd_conf *mdev) __must_hold(local)
3854
for (i = UI_HISTORY_START; i < UI_HISTORY_END; i++) {
4112
for (i = UI_HISTORY_START; i < UI_HISTORY_END; i++)
3855
4113
mdev->ldev->md.uuid[i+1] = mdev->ldev->md.uuid[i];
3857
debug_drbd_uuid(mdev, i+1);
3861
4116
void _drbd_uuid_set(struct drbd_conf *mdev, int idx, u64 val) __must_hold(local)
3880
4134
if (mdev->ldev->md.uuid[idx]) {
3881
4135
drbd_uuid_move_history(mdev);
3882
4136
mdev->ldev->md.uuid[UI_HISTORY_START] = mdev->ldev->md.uuid[idx];
3883
debug_drbd_uuid(mdev, UI_HISTORY_START);
3885
4138
_drbd_uuid_set(mdev, idx, val);
3895
4148
void drbd_uuid_new_current(struct drbd_conf *mdev) __must_hold(local)
3899
dev_info(DEV, "Creating new current UUID\n");
3900
D_ASSERT(mdev->ldev->md.uuid[UI_BITMAP] == 0);
4151
unsigned long long bm_uuid = mdev->ldev->md.uuid[UI_BITMAP];
4154
dev_warn(DEV, "bm UUID was already set: %llX\n", bm_uuid);
3901
4156
mdev->ldev->md.uuid[UI_BITMAP] = mdev->ldev->md.uuid[UI_CURRENT];
3902
debug_drbd_uuid(mdev, UI_BITMAP);
3904
4158
get_random_bytes(&val, sizeof(u64));
3905
4159
_drbd_uuid_set(mdev, UI_CURRENT, val);
4160
drbd_print_uuids(mdev, "new current UUID");
3906
4161
/* get it to stable storage _now_ */
3907
4162
drbd_md_sync(mdev);
3916
4171
drbd_uuid_move_history(mdev);
3917
4172
mdev->ldev->md.uuid[UI_HISTORY_START] = mdev->ldev->md.uuid[UI_BITMAP];
3918
4173
mdev->ldev->md.uuid[UI_BITMAP] = 0;
3919
debug_drbd_uuid(mdev, UI_HISTORY_START);
3920
debug_drbd_uuid(mdev, UI_BITMAP);
3922
if (mdev->ldev->md.uuid[UI_BITMAP])
3923
dev_warn(DEV, "bm UUID already set");
3925
mdev->ldev->md.uuid[UI_BITMAP] = val;
3926
mdev->ldev->md.uuid[UI_BITMAP] &= ~((u64)1);
3928
debug_drbd_uuid(mdev, UI_BITMAP);
4175
unsigned long long bm_uuid = mdev->ldev->md.uuid[UI_BITMAP];
4177
dev_warn(DEV, "bm UUID was already set: %llX\n", bm_uuid);
4179
mdev->ldev->md.uuid[UI_BITMAP] = val & ~((u64)1);
3930
4181
drbd_md_mark_dirty(mdev);
3981
4232
STATIC int w_bitmap_io(struct drbd_conf *mdev, struct drbd_work *w, int unused)
3983
4234
struct bm_io_work *work = container_of(w, struct bm_io_work, w);
3986
4237
D_ASSERT(atomic_read(&mdev->ap_bio_cnt) == 0);
3988
drbd_bm_lock(mdev, work->why);
3989
rv = work->io_fn(mdev);
3990
drbd_bm_unlock(mdev);
4239
if (get_ldev(mdev)) {
4240
drbd_bm_lock(mdev, work->why, work->flags);
4241
rv = work->io_fn(mdev);
4242
drbd_bm_unlock(mdev);
3992
4246
clear_bit(BITMAP_IO, &mdev->flags);
4247
smp_mb__after_clear_bit();
3993
4248
wake_up(&mdev->misc_wait);
3995
4250
if (work->done)
4051
4307
void drbd_queue_bitmap_io(struct drbd_conf *mdev,
4052
4308
int (*io_fn)(struct drbd_conf *),
4053
4309
void (*done)(struct drbd_conf *, int),
4310
char *why, enum bm_flag flags)
4056
4312
D_ASSERT(current == mdev->worker.task);
4065
4321
mdev->bm_io_work.io_fn = io_fn;
4066
4322
mdev->bm_io_work.done = done;
4067
4323
mdev->bm_io_work.why = why;
4324
mdev->bm_io_work.flags = flags;
4326
spin_lock_irq(&mdev->req_lock);
4069
4327
set_bit(BITMAP_IO, &mdev->flags);
4070
4328
if (atomic_read(&mdev->ap_bio_cnt) == 0) {
4071
if (list_empty(&mdev->bm_io_work.w.list)) {
4072
set_bit(BITMAP_IO_QUEUED, &mdev->flags);
4329
if (!test_and_set_bit(BITMAP_IO_QUEUED, &mdev->flags))
4073
4330
drbd_queue_work(&mdev->data.work, &mdev->bm_io_work.w);
4075
dev_err(DEV, "FIXME avoided double queuing bm_io_work\n");
4332
spin_unlock_irq(&mdev->req_lock);
4085
4341
* freezes application IO while that the actual IO operations runs. This
4086
4342
* functions MAY NOT be called from worker context.
4088
int drbd_bitmap_io(struct drbd_conf *mdev, int (*io_fn)(struct drbd_conf *), char *why)
4344
int drbd_bitmap_io(struct drbd_conf *mdev, int (*io_fn)(struct drbd_conf *),
4345
char *why, enum bm_flag flags)
4092
4349
D_ASSERT(current != mdev->worker.task);
4094
drbd_suspend_io(mdev);
4351
if ((flags & BM_LOCKED_SET_ALLOWED) == 0)
4352
drbd_suspend_io(mdev);
4096
drbd_bm_lock(mdev, why);
4354
drbd_bm_lock(mdev, why, flags);
4097
4355
rv = io_fn(mdev);
4098
4356
drbd_bm_unlock(mdev);
4100
drbd_resume_io(mdev);
4358
if ((flags & BM_LOCKED_SET_ALLOWED) == 0)
4359
drbd_resume_io(mdev);