--- linux-2.4.21-0.11mdksmp/drivers/cdrom/cdrom.c.usage_count	2003-03-30 14:55:42.000000000 +0400
+++ linux-2.4.21-0.11mdksmp/drivers/cdrom/cdrom.c	2003-04-05 19:19:12.000000000 +0400
@@ -929,17 +929,17 @@ int cdrom_mediactl (kdev_t dev, int op, 
 	switch (op) {
 	case MEDIA_LOCK:
 	case MEDIA_UNLOCK:
-		if (op == MEDIA_LOCK && optarg)
-			cdi->use_count ++;
-		if (cdo->capability & ~cdi->mask & CDC_LOCK &&
-			    cdi->options & CDO_LOCK &&
-			    supermount_usage_count(dev, cdi->use_count) == 1)
-			cdo->lock_door(cdi, (op == MEDIA_LOCK));
 		if (op == MEDIA_UNLOCK && optarg) {
-			cdi->use_count --;
+			cdi->use_count--;
 			if (cdi->use_count < 0)
 				cdi->use_count = 0;
 		}
+		if (cdo->capability & ~cdi->mask & CDC_LOCK &&
+			    cdi->options & CDO_LOCK &&
+			    supermount_usage_count(dev, cdi->use_count) == 0)
+			cdo->lock_door(cdi, (op == MEDIA_LOCK));
+		if (op == MEDIA_LOCK && optarg)
+			cdi->use_count++;
 		break;
 	default:
 		return -ENOSYS;
--- linux-2.4.21-0.11mdksmp/drivers/ide/ide-floppy.c.usage_count	2003-03-30 19:06:24.000000000 +0400
+++ linux-2.4.21-0.11mdksmp/drivers/ide/ide-floppy.c	2003-04-05 19:22:13.000000000 +0400
@@ -1873,19 +1873,19 @@ static int idefloppy_mediactl (ide_drive
 	switch (op) {
 		case MEDIA_LOCK:
 		case MEDIA_UNLOCK:
-			if (op == MEDIA_LOCK && optarg)
-				drive->usage++;
-			/* IOMEGA Clik! drives do not support lock/unlock commands */
-			if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)
-			    && supermount_usage_count(dev, drive->usage) == 1) {
-				idefloppy_create_prevent_cmd(&pc, (op == MEDIA_LOCK));
-				(void) idefloppy_queue_pc_tail(drive, &pc);
-			}
 			if (op == MEDIA_UNLOCK && optarg) {
 				drive->usage--;
 				if (drive->usage < 0)
 					drive->usage = 0;
 			}
+			/* IOMEGA Clik! drives do not support lock/unlock commands */
+			if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)
+			    && supermount_usage_count(dev, drive->usage) == 0) {
+				idefloppy_create_prevent_cmd(&pc, (op == MEDIA_LOCK));
+				(void) idefloppy_queue_pc_tail(drive, &pc);
+			}
+			if (op == MEDIA_LOCK && optarg)
+				drive->usage++;
 			break;
 		default:
 			return -ENOSYS;
--- linux-2.4.21-0.11mdksmp/drivers/scsi/sd.c.usage_count	2003-03-30 14:54:01.000000000 +0400
+++ linux-2.4.21-0.11mdksmp/drivers/scsi/sd.c	2003-04-05 19:20:06.000000000 +0400
@@ -586,11 +586,11 @@ static int sd_mediactl(kdev_t full_dev, 
 
  	switch (op) {
 		case MEDIA_LOCK:
-			if (optarg)
-				SDev->access_count++;
-			if (supermount_usage_count(full_dev, SDev->access_count) == 1)
+			if (supermount_usage_count(full_dev, SDev->access_count) == 0)
 				if (scsi_block_when_processing_errors(SDev))
 					rc = scsi_ioctl(SDev, SCSI_IOCTL_DOORLOCK, 0);
+			if (optarg)
+				SDev->access_count++;
 			break;
 		case MEDIA_UNLOCK:
 			if (optarg)
