goto end_io;
+ /* this is cfs's dev_rdonly check */
-+ if (bio->bi_rw == WRITE && dev_check_rdonly(bio->bi_bdev)) {
++ if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+ struct block_device *bdev = bio->bi_bdev;
+
+ printk(KERN_WARNING "Write to readonly device %s (%#x) "
goto end_io;
+ /* this is cfs's dev_rdonly check */
-+ if (bio->bi_rw == WRITE && dev_check_rdonly(bio->bi_bdev)) {
++ if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+ struct block_device *bdev = bio->bi_bdev;
+
+ printk(KERN_WARNING "Write to readonly device %s (%#x) "
goto end_io;
+ /* this is cfs's dev_rdonly check */
-+ if (bio->bi_rw == WRITE && dev_check_rdonly(bio->bi_bdev)) {
++ if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+ struct block_device *bdev = bio->bi_bdev;
+
+ printk(KERN_WARNING "Write to readonly device %s (%#x) "
out_lmm:
info->mti_mdt = NULL;
/* cleanup client slot early */
- mdt_client_del(&env, mdt);
+ /* Do not erase record for recoverable client. */
+ if (!obd->obd_fail || exp->exp_failed)
+ mdt_client_del(&env, mdt);
lu_env_fini(&env);
RETURN(rc);
obd_iocontrol(OBD_IOC_SYNC,
obd->obd_self_export,
0, NULL, NULL);
- /* Set the obd readonly if we can */
- obd_iocontrol(OBD_IOC_SET_READONLY,
- obd->obd_self_export,
- 0, NULL, NULL);
}
break;
default:
rc = server_disconnect_export(exp);
- if (exp->exp_obd->obd_replayable)
+ /* Do not erase record for recoverable client. */
+ if (obd->obd_replayable && (!obd->obd_fail || exp->exp_failed))
filter_client_del(exp);
else
fsfilt_sync(obd, obd->u.obt.obt_sb);