OSDN Git Service

floppy: make sure to reset all FDCs upon resume()
authorWilly Tarreau <w@1wt.eu>
Fri, 10 Apr 2020 10:19:02 +0000 (12:19 +0200)
committerDenis Efremov <efremov@linux.com>
Tue, 12 May 2020 16:34:56 +0000 (19:34 +0300)
In floppy_resume() we don't properly reinitialize all FDCs, instead
we reinitialize the current FDC once per available FDC because value
-1 is passed to user_reset_fdc(). Let's simply save the current drive
and properly reinitialize each FDC.

Link: https://lore.kernel.org/r/20200410101904.14652-1-w@1wt.eu
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Denis Efremov <efremov@linux.com>
drivers/block/floppy.c

index 8da7921..b102f55 100644 (file)
@@ -4545,11 +4545,13 @@ static void floppy_device_release(struct device *dev)
 static int floppy_resume(struct device *dev)
 {
        int fdc;
+       int saved_drive;
 
+       saved_drive = current_drive;
        for (fdc = 0; fdc < N_FDC; fdc++)
                if (fdc_state[fdc].address != -1)
-                       user_reset_fdc(-1, FD_RESET_ALWAYS, false);
-
+                       user_reset_fdc(REVDRIVE(fdc, 0), FD_RESET_ALWAYS, false);
+       set_fdc(saved_drive);
        return 0;
 }