Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drbd: Force flag for the detach operation

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>

+19 -2
+1 -1
drivers/block/drbd/drbd_main.c
··· 495 495 ((os.role != R_PRIMARY && ns.role == R_PRIMARY) || 496 496 (os.conn != C_STARTING_SYNC_T && ns.conn == C_STARTING_SYNC_T) || 497 497 (os.conn != C_STARTING_SYNC_S && ns.conn == C_STARTING_SYNC_S) || 498 - (os.disk != D_DISKLESS && ns.disk == D_DISKLESS))) || 498 + (os.disk != D_FAILED && ns.disk == D_FAILED))) || 499 499 (os.conn >= C_CONNECTED && ns.conn == C_DISCONNECTING) || 500 500 (os.conn == C_CONNECTED && ns.conn == C_VERIFY_S); 501 501 }
+15
drivers/block/drbd/drbd_nl.c
··· 1337 1337 { 1338 1338 enum drbd_ret_code retcode; 1339 1339 int ret; 1340 + struct detach dt = {}; 1341 + 1342 + if (!detach_from_tags(mdev, nlp->tag_list, &dt)) { 1343 + reply->ret_code = ERR_MANDATORY_TAG; 1344 + goto out; 1345 + } 1346 + 1347 + if (dt.detach_force) { 1348 + drbd_force_state(mdev, NS(disk, D_FAILED)); 1349 + reply->ret_code = SS_SUCCESS; 1350 + goto out; 1351 + } 1352 + 1340 1353 drbd_suspend_io(mdev); /* so no-one is stuck in drbd_al_begin_io */ 1341 1354 retcode = drbd_request_state(mdev, NS(disk, D_FAILED)); 1342 1355 /* D_FAILED will transition to DISKLESS. */ 1343 1356 ret = wait_event_interruptible(mdev->misc_wait, 1344 1357 mdev->state.disk != D_FAILED); 1345 1358 drbd_resume_io(mdev); 1359 + 1346 1360 if ((int)retcode == (int)SS_IS_DISKLESS) 1347 1361 retcode = SS_NOTHING_TO_DO; 1348 1362 if (ret) 1349 1363 retcode = ERR_INTR; 1350 1364 reply->ret_code = retcode; 1365 + out: 1351 1366 return 0; 1352 1367 } 1353 1368
+3 -1
include/linux/drbd_nl.h
··· 33 33 NL_BIT( 58, T_MAY_IGNORE, no_disk_drain) 34 34 ) 35 35 36 - NL_PACKET(detach, 4, ) 36 + NL_PACKET(detach, 4, 37 + NL_BIT( 88, T_MANDATORY, detach_force) 38 + ) 37 39 38 40 NL_PACKET(net_conf, 5, 39 41 NL_STRING( 8, T_MANDATORY, my_addr, 128)