<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/block, branch v4.16.7</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>block/swim: Fix IO error at end of medium</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=1b3ee60f29c1534890d12e5ea993d637ebbf3e09'/>
<id>1b3ee60f29c1534890d12e5ea993d637ebbf3e09</id>
<content type='text'>
commit 5a13388d7aa1177b98d7168330ecbeeac52f844d upstream.

Reading to the end of a 720K disk results in an IO error instead of EOF
because the block layer thinks the disk has 2880 sectors. (Partly this
is a result of inverted logic of the ONEMEG_MEDIA bit that's now fixed.)

Initialize the density and head count in swim_add_floppy() to agree
with the device size passed to set_capacity() during drive probe.

Call set_capacity() again upon device open, after refreshing the density
and head count values.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 5a13388d7aa1177b98d7168330ecbeeac52f844d upstream.

Reading to the end of a 720K disk results in an IO error instead of EOF
because the block layer thinks the disk has 2880 sectors. (Partly this
is a result of inverted logic of the ONEMEG_MEDIA bit that's now fixed.)

Initialize the density and head count in swim_add_floppy() to agree
with the device size passed to set_capacity() during drive probe.

Call set_capacity() again upon device open, after refreshing the density
and head count values.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/swim: Fix array bounds check</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=251bb29a8aed31b69b900de0fe93e46caf67cb82'/>
<id>251bb29a8aed31b69b900de0fe93e46caf67cb82</id>
<content type='text'>
commit 7ae6a2b6cc058005ee3d0d2b9ce27688e51afa4b upstream.

In the floppy_find() function in swim.c is a call to
get_disk(swd-&gt;unit[drive].disk). The actual parameter to this call
can be a NULL pointer when drive == swd-&gt;floppy_count. This causes
an oops in get_disk().

Data read fault at 0x00000198 in Super Data (pc=0x1be5b6)
BAD KERNEL BUSERR
Oops: 00000000
Modules linked in: swim_mod ipv6 mac8390
PC: [&lt;001be5b6&gt;] get_disk+0xc/0x76
SR: 2004  SP: 9a078bc1  a2: 0213ed90
d0: 00000000    d1: 00000000    d2: 00000000    d3: 000000ff
d4: 00000002    d5: 02983590    a0: 02332e00    a1: 022dfd64
Process dd (pid: 285, task=020ab25b)
Frame format=B ssw=074d isc=4a88 isb=6732 daddr=00000198 dobuf=00000000
baddr=001be5bc dibuf=bfffffff ver=f
Stack from 022dfca4:
        00000000 0203fc00 0213ed90 022dfcc0 02982936 00000000 00200000 022dfd08
        0020f85a 00200000 022dfd64 02332e00 004040fc 00000014 001be77e 022dfd64
        00334e4a 001be3f8 0800001d 022dfd64 01c04b60 01c04b70 022aba80 029828f8
        02332e00 022dfd2c 001be7ac 0203fc00 00200000 022dfd64 02103a00 01c04b60
        01c04b60 0200e400 022dfd68 000e191a 00200000 022dfd64 02103a00 0800001d
        00000000 00000003 000b89de 00500000 02103a00 01c04b60 02103a08 01c04c2e
Call Trace: [&lt;02982936&gt;] floppy_find+0x3e/0x4a [swim_mod]
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;0020f85a&gt;] kobj_lookup+0xde/0x132
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;001be77e&gt;] get_gendisk+0x0/0x130
 [&lt;00334e4a&gt;] mutex_lock+0x0/0x2e
 [&lt;001be3f8&gt;] disk_block_events+0x0/0x6c
 [&lt;029828f8&gt;] floppy_find+0x0/0x4a [swim_mod]
 [&lt;001be7ac&gt;] get_gendisk+0x2e/0x130
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;000e191a&gt;] __blkdev_get+0x32/0x45a
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;000b89de&gt;] complete_walk+0x0/0x8a
 [&lt;000e1e22&gt;] blkdev_get+0xe0/0x29a
 [&lt;000e1fdc&gt;] blkdev_open+0x0/0xb0
 [&lt;000b89de&gt;] complete_walk+0x0/0x8a
 [&lt;000e1fdc&gt;] blkdev_open+0x0/0xb0
 [&lt;000e01cc&gt;] bd_acquire+0x74/0x8a
 [&lt;000e205c&gt;] blkdev_open+0x80/0xb0
 [&lt;000e1fdc&gt;] blkdev_open+0x0/0xb0
 [&lt;000abf24&gt;] do_dentry_open+0x1a4/0x322
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;000b89de&gt;] complete_walk+0x0/0x8a
 [&lt;000baa62&gt;] link_path_walk+0x0/0x48e
 [&lt;000ba3f8&gt;] inode_permission+0x20/0x54
 [&lt;000ac0e4&gt;] vfs_open+0x42/0x78
 [&lt;000bc372&gt;] path_openat+0x2b2/0xeaa
 [&lt;000bc0c0&gt;] path_openat+0x0/0xeaa
 [&lt;0004463e&gt;] __irq_wake_thread+0x0/0x4e
 [&lt;0003a45a&gt;] task_tick_fair+0x18/0xc8
 [&lt;000bd00a&gt;] do_filp_open+0xa0/0xea
 [&lt;000abae0&gt;] do_sys_open+0x11a/0x1ee
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;000abbf4&gt;] SyS_open+0x1e/0x22
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;00002b40&gt;] syscall+0x8/0xc
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;0000c00b&gt;] dyadic+0x1/0x28
Code: 4e5e 4e75 4e56 fffc 2f0b 2f02 266e 0008 &lt;206b&gt; 0198 4a88 6732 2428 002c 661e 486b 0058 4eb9 0032 0b96 588f 4a88 672c 2008
Disabling lock debugging due to kernel taint

Fix the array index bounds check to avoid this.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Fixes: 8852ecd97488 ("[PATCH] m68k: mac - Add SWIM floppy support")
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 7ae6a2b6cc058005ee3d0d2b9ce27688e51afa4b upstream.

In the floppy_find() function in swim.c is a call to
get_disk(swd-&gt;unit[drive].disk). The actual parameter to this call
can be a NULL pointer when drive == swd-&gt;floppy_count. This causes
an oops in get_disk().

Data read fault at 0x00000198 in Super Data (pc=0x1be5b6)
BAD KERNEL BUSERR
Oops: 00000000
Modules linked in: swim_mod ipv6 mac8390
PC: [&lt;001be5b6&gt;] get_disk+0xc/0x76
SR: 2004  SP: 9a078bc1  a2: 0213ed90
d0: 00000000    d1: 00000000    d2: 00000000    d3: 000000ff
d4: 00000002    d5: 02983590    a0: 02332e00    a1: 022dfd64
Process dd (pid: 285, task=020ab25b)
Frame format=B ssw=074d isc=4a88 isb=6732 daddr=00000198 dobuf=00000000
baddr=001be5bc dibuf=bfffffff ver=f
Stack from 022dfca4:
        00000000 0203fc00 0213ed90 022dfcc0 02982936 00000000 00200000 022dfd08
        0020f85a 00200000 022dfd64 02332e00 004040fc 00000014 001be77e 022dfd64
        00334e4a 001be3f8 0800001d 022dfd64 01c04b60 01c04b70 022aba80 029828f8
        02332e00 022dfd2c 001be7ac 0203fc00 00200000 022dfd64 02103a00 01c04b60
        01c04b60 0200e400 022dfd68 000e191a 00200000 022dfd64 02103a00 0800001d
        00000000 00000003 000b89de 00500000 02103a00 01c04b60 02103a08 01c04c2e
Call Trace: [&lt;02982936&gt;] floppy_find+0x3e/0x4a [swim_mod]
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;0020f85a&gt;] kobj_lookup+0xde/0x132
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;001be77e&gt;] get_gendisk+0x0/0x130
 [&lt;00334e4a&gt;] mutex_lock+0x0/0x2e
 [&lt;001be3f8&gt;] disk_block_events+0x0/0x6c
 [&lt;029828f8&gt;] floppy_find+0x0/0x4a [swim_mod]
 [&lt;001be7ac&gt;] get_gendisk+0x2e/0x130
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;000e191a&gt;] __blkdev_get+0x32/0x45a
 [&lt;00200000&gt;] uart_remove_one_port+0x1a2/0x260
 [&lt;000b89de&gt;] complete_walk+0x0/0x8a
 [&lt;000e1e22&gt;] blkdev_get+0xe0/0x29a
 [&lt;000e1fdc&gt;] blkdev_open+0x0/0xb0
 [&lt;000b89de&gt;] complete_walk+0x0/0x8a
 [&lt;000e1fdc&gt;] blkdev_open+0x0/0xb0
 [&lt;000e01cc&gt;] bd_acquire+0x74/0x8a
 [&lt;000e205c&gt;] blkdev_open+0x80/0xb0
 [&lt;000e1fdc&gt;] blkdev_open+0x0/0xb0
 [&lt;000abf24&gt;] do_dentry_open+0x1a4/0x322
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;000b89de&gt;] complete_walk+0x0/0x8a
 [&lt;000baa62&gt;] link_path_walk+0x0/0x48e
 [&lt;000ba3f8&gt;] inode_permission+0x20/0x54
 [&lt;000ac0e4&gt;] vfs_open+0x42/0x78
 [&lt;000bc372&gt;] path_openat+0x2b2/0xeaa
 [&lt;000bc0c0&gt;] path_openat+0x0/0xeaa
 [&lt;0004463e&gt;] __irq_wake_thread+0x0/0x4e
 [&lt;0003a45a&gt;] task_tick_fair+0x18/0xc8
 [&lt;000bd00a&gt;] do_filp_open+0xa0/0xea
 [&lt;000abae0&gt;] do_sys_open+0x11a/0x1ee
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;000abbf4&gt;] SyS_open+0x1e/0x22
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;00002b40&gt;] syscall+0x8/0xc
 [&lt;00020000&gt;] __do_proc_douintvec+0x22/0x27e
 [&lt;0000c00b&gt;] dyadic+0x1/0x28
Code: 4e5e 4e75 4e56 fffc 2f0b 2f02 266e 0008 &lt;206b&gt; 0198 4a88 6732 2428 002c 661e 486b 0058 4eb9 0032 0b96 588f 4a88 672c 2008
Disabling lock debugging due to kernel taint

Fix the array index bounds check to avoid this.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Fixes: 8852ecd97488 ("[PATCH] m68k: mac - Add SWIM floppy support")
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/swim: Select appropriate drive on device open</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=25ecf07d280a0e6cdb9f31ba5969ea908094e89d'/>
<id>25ecf07d280a0e6cdb9f31ba5969ea908094e89d</id>
<content type='text'>
commit b3906535ccc6cd04c42f9b1c7e31d1947b3ebc74 upstream.

The driver supports internal and external FDD units so the floppy_open
function must not hard-code the drive location.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit b3906535ccc6cd04c42f9b1c7e31d1947b3ebc74 upstream.

The driver supports internal and external FDD units so the floppy_open
function must not hard-code the drive location.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/swim: Rename macros to avoid inconsistent inverted logic</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=23a6457b370b6733a121fc8acce1228dbbfae140'/>
<id>23a6457b370b6733a121fc8acce1228dbbfae140</id>
<content type='text'>
commit 56a1c5ee54f69dd767fb61d301883dc919ddc259 upstream.

The Sony drive status bits use active-low logic. The swim_readbit()
function converts that to 'C' logic for readability. Hence, the
sense of the names of the status bit macros should not be inverted.

Mostly they are correct. However, the TWOMEG_DRIVE, MFM_MODE and
TWOMEG_MEDIA macros have inverted sense (like MkLinux). Fix this
inconsistency and make the following patches less confusing.

The same problem affects swim3.c so fix that too.

No functional change.

The FDHD drive status bits are documented in sonydriv.cpp from MAME
and in swimiii.h from MkLinux.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 56a1c5ee54f69dd767fb61d301883dc919ddc259 upstream.

The Sony drive status bits use active-low logic. The swim_readbit()
function converts that to 'C' logic for readability. Hence, the
sense of the names of the status bit macros should not be inverted.

Mostly they are correct. However, the TWOMEG_DRIVE, MFM_MODE and
TWOMEG_MEDIA macros have inverted sense (like MkLinux). Fix this
inconsistency and make the following patches less confusing.

The same problem affects swim3.c so fix that too.

No functional change.

The FDHD drive status bits are documented in sonydriv.cpp from MAME
and in swimiii.h from MkLinux.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/swim: Remove extra put_disk() call from error path</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=774e97575e32a3a4ed5c114ca5fd2e1173cb0190'/>
<id>774e97575e32a3a4ed5c114ca5fd2e1173cb0190</id>
<content type='text'>
commit c1d6207cc0eef2a7f8551f9c7420d8776268f6e1 upstream.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Fixes: 103db8b2dfa5 ("[PATCH] swim: stop sharing request queue across multiple gendisks")
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit c1d6207cc0eef2a7f8551f9c7420d8776268f6e1 upstream.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Fixes: 103db8b2dfa5 ("[PATCH] swim: stop sharing request queue across multiple gendisks")
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/swim: Don't log an error message for an invalid ioctl</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=dded6f0a67f8da7f743b0d14be31fc821dc483a4'/>
<id>dded6f0a67f8da7f743b0d14be31fc821dc483a4</id>
<content type='text'>
commit 8e2ab5a4efaac77fb93e5b5b109d0b3976fdd3a0 upstream.

The 'eject' shell command may send various different ioctl commands.
This leads to error messages on the console even though the FDEJECT
ioctl succeeds.

~# eject floppy
SWIM floppy_ioctl: unknown cmd 21257
SWIM floppy_ioctl: unknown cmd 1

Don't log an error message for an invalid ioctl, just do as the
swim3 driver does and return -ENOTTY.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 8e2ab5a4efaac77fb93e5b5b109d0b3976fdd3a0 upstream.

The 'eject' shell command may send various different ioctl commands.
This leads to error messages on the console even though the FDEJECT
ioctl succeeds.

~# eject floppy
SWIM floppy_ioctl: unknown cmd 21257
SWIM floppy_ioctl: unknown cmd 1

Don't log an error message for an invalid ioctl, just do as the
swim3 driver does and return -ENOTTY.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/swim: Check drive type</title>
<updated>2018-04-29T09:35:51+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=95c2b9b72235829cb02eecf094a436b73bdf9059'/>
<id>95c2b9b72235829cb02eecf094a436b73bdf9059</id>
<content type='text'>
commit 8a500df63d07d8aee44b7ee2c54e462e47ce93ec upstream.

The SWIM chip is compatible with GCR-mode Sony 400K/800K drives but
this driver only supports MFM mode. Therefore only Sony FDHD drives
are supported. Skip incompatible drives.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 8a500df63d07d8aee44b7ee2c54e462e47ce93ec upstream.

The SWIM chip is compatible with GCR-mode Sony 400K/800K drives but
this driver only supports MFM mode. Therefore only Sony FDHD drives
are supported. Skip incompatible drives.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: Jens Axboe &lt;axboe@kernel.dk&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>m68k/mac: Don't remap SWIM MMIO region</title>
<updated>2018-04-29T09:35:50+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-04-12T00:50:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=620c09401ef343b1e7ae6d6ccaf643243edb26eb'/>
<id>620c09401ef343b1e7ae6d6ccaf643243edb26eb</id>
<content type='text'>
commit b64576cbf36afa5fabf3b31f62a1994c429ef855 upstream.

For reasons I don't understand, calling ioremap() then iounmap() on
the SWIM MMIO region causes a hang on 68030 (but not on 68040).

~# modprobe swim_mod
SWIM floppy driver Version 0.2 (2008-10-30)
SWIM device not found !
watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [modprobe:285]
Modules linked in: swim_mod(+)
Format 00  Vector: 0064  PC: 000075aa  Status: 2000    Not tainted
ORIG_D0: ffffffff  D0: d00c0000  A2: 007c2370  A1: 003f810c
A0: 00040000  D5: d0096800  D4: d0097e00
D3: 00000001  D2: 00000003  D1: 00000000
Non-Maskable Interrupt
Modules linked in: swim_mod(+)
PC: [&lt;000075ba&gt;] __iounmap+0x24/0x10e
SR: 2000  SP: 007abc48  a2: 007c2370
d0: d00c0000    d1: 000001a0    d2: 00000019    d3: 00000001
d4: d0097e00    d5: d0096800    a0: 00040000    a1: 003f810c
Process modprobe (pid: 285, task=007c2370)
Frame format=0
Stack from 007abc7c:
        ffffffed 00000000 006a4060 004712e0 007abca0 000076ea d0080000 00080000
        010bb4b8 007abcd8 010ba542 d0096000 00000000 00000000 00000001 010bb59c
        00000000 007abf30 010bb4b8 0047760a 0047763c 00477612 00616540 007abcec
        0020a91a 00477600 0047760a 010bb4cc 007abd18 002092f2 0047760a 00333b06
        007abd5c 00000000 0047760a 010bb4cc 00404f90 004776b8 00000001 007abd38
        00209446 010bb4cc 0047760a 010bb4cc 0020938e 0031f8be 00616540 007abd64
Call Trace: [&lt;000076ea&gt;] iounmap+0x46/0x5a
 [&lt;00080000&gt;] shrink_page_list+0x7f6/0xe06
 [&lt;010ba542&gt;] swim_probe+0xe4/0x496 [swim_mod]
 [&lt;0020a91a&gt;] platform_drv_probe+0x20/0x5e
 [&lt;002092f2&gt;] driver_probe_device+0x21c/0x2b8
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;00209446&gt;] __driver_attach+0xb8/0xce
 [&lt;0020938e&gt;] __driver_attach+0x0/0xce
 [&lt;0031f8be&gt;] klist_next+0x0/0xa0
 [&lt;00207562&gt;] bus_for_each_dev+0x74/0xba
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;00208e44&gt;] driver_attach+0x1a/0x1e
 [&lt;0020938e&gt;] __driver_attach+0x0/0xce
 [&lt;00207e26&gt;] bus_add_driver+0x188/0x234
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;00209894&gt;] driver_register+0x58/0x104
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;010bd000&gt;] swim_init+0x0/0x2c [swim_mod]
 [&lt;0020a7be&gt;] __platform_driver_register+0x38/0x3c
 [&lt;010bd028&gt;] swim_init+0x28/0x2c [swim_mod]
 [&lt;000020dc&gt;] do_one_initcall+0x38/0x196
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;00075008&gt;] __free_pages+0x0/0x38
 [&lt;000045c0&gt;] mangle_kernel_stack+0x30/0xda
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;0005ced4&gt;] do_init_module+0x42/0x266
 [&lt;010bd000&gt;] swim_init+0x0/0x2c [swim_mod]
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;0005eda0&gt;] load_module+0x1a30/0x1e70
 [&lt;0000465d&gt;] mangle_kernel_stack+0xcd/0xda
 [&lt;00331c64&gt;] __generic_copy_from_user+0x0/0x46
 [&lt;0033256e&gt;] _cond_resched+0x0/0x32
 [&lt;00331b9c&gt;] memset+0x0/0x98
 [&lt;0033256e&gt;] _cond_resched+0x0/0x32
 [&lt;0005f25c&gt;] SyS_init_module+0x7c/0x112
 [&lt;00002000&gt;] _start+0x0/0x8
 [&lt;00002000&gt;] _start+0x0/0x8
 [&lt;00331c82&gt;] __generic_copy_from_user+0x1e/0x46
 [&lt;0005f2b2&gt;] SyS_init_module+0xd2/0x112
 [&lt;0000465d&gt;] mangle_kernel_stack+0xcd/0xda
 [&lt;00002b40&gt;] syscall+0x8/0xc
 [&lt;0000465d&gt;] mangle_kernel_stack+0xcd/0xda
 [&lt;0008c00c&gt;] pcpu_balance_workfn+0xb2/0x40e
Code: 2200 7419 e4a9 e589 2841 d9fc 0000 1000 &lt;2414&gt; 7203 c282 7602 b681 6600 0096 0242 fe00 0482 0000 0000 e9c0 11c3 ed89 2642

There's no need to call ioremap() for the SWIM address range, as it lies
within the usual IO device region at 0x5000 0000, which has already been
mapped by head.S.

Remove the redundant ioremap() and iounmap() calls to fix the hang.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit b64576cbf36afa5fabf3b31f62a1994c429ef855 upstream.

For reasons I don't understand, calling ioremap() then iounmap() on
the SWIM MMIO region causes a hang on 68030 (but not on 68040).

~# modprobe swim_mod
SWIM floppy driver Version 0.2 (2008-10-30)
SWIM device not found !
watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [modprobe:285]
Modules linked in: swim_mod(+)
Format 00  Vector: 0064  PC: 000075aa  Status: 2000    Not tainted
ORIG_D0: ffffffff  D0: d00c0000  A2: 007c2370  A1: 003f810c
A0: 00040000  D5: d0096800  D4: d0097e00
D3: 00000001  D2: 00000003  D1: 00000000
Non-Maskable Interrupt
Modules linked in: swim_mod(+)
PC: [&lt;000075ba&gt;] __iounmap+0x24/0x10e
SR: 2000  SP: 007abc48  a2: 007c2370
d0: d00c0000    d1: 000001a0    d2: 00000019    d3: 00000001
d4: d0097e00    d5: d0096800    a0: 00040000    a1: 003f810c
Process modprobe (pid: 285, task=007c2370)
Frame format=0
Stack from 007abc7c:
        ffffffed 00000000 006a4060 004712e0 007abca0 000076ea d0080000 00080000
        010bb4b8 007abcd8 010ba542 d0096000 00000000 00000000 00000001 010bb59c
        00000000 007abf30 010bb4b8 0047760a 0047763c 00477612 00616540 007abcec
        0020a91a 00477600 0047760a 010bb4cc 007abd18 002092f2 0047760a 00333b06
        007abd5c 00000000 0047760a 010bb4cc 00404f90 004776b8 00000001 007abd38
        00209446 010bb4cc 0047760a 010bb4cc 0020938e 0031f8be 00616540 007abd64
Call Trace: [&lt;000076ea&gt;] iounmap+0x46/0x5a
 [&lt;00080000&gt;] shrink_page_list+0x7f6/0xe06
 [&lt;010ba542&gt;] swim_probe+0xe4/0x496 [swim_mod]
 [&lt;0020a91a&gt;] platform_drv_probe+0x20/0x5e
 [&lt;002092f2&gt;] driver_probe_device+0x21c/0x2b8
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;00209446&gt;] __driver_attach+0xb8/0xce
 [&lt;0020938e&gt;] __driver_attach+0x0/0xce
 [&lt;0031f8be&gt;] klist_next+0x0/0xa0
 [&lt;00207562&gt;] bus_for_each_dev+0x74/0xba
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;00208e44&gt;] driver_attach+0x1a/0x1e
 [&lt;0020938e&gt;] __driver_attach+0x0/0xce
 [&lt;00207e26&gt;] bus_add_driver+0x188/0x234
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;00209894&gt;] driver_register+0x58/0x104
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;010bd000&gt;] swim_init+0x0/0x2c [swim_mod]
 [&lt;0020a7be&gt;] __platform_driver_register+0x38/0x3c
 [&lt;010bd028&gt;] swim_init+0x28/0x2c [swim_mod]
 [&lt;000020dc&gt;] do_one_initcall+0x38/0x196
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;00075008&gt;] __free_pages+0x0/0x38
 [&lt;000045c0&gt;] mangle_kernel_stack+0x30/0xda
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;003331cc&gt;] mutex_unlock+0x0/0x3e
 [&lt;00333b06&gt;] mutex_lock+0x0/0x2e
 [&lt;0005ced4&gt;] do_init_module+0x42/0x266
 [&lt;010bd000&gt;] swim_init+0x0/0x2c [swim_mod]
 [&lt;000344c0&gt;] blocking_notifier_call_chain+0x0/0x20
 [&lt;0005eda0&gt;] load_module+0x1a30/0x1e70
 [&lt;0000465d&gt;] mangle_kernel_stack+0xcd/0xda
 [&lt;00331c64&gt;] __generic_copy_from_user+0x0/0x46
 [&lt;0033256e&gt;] _cond_resched+0x0/0x32
 [&lt;00331b9c&gt;] memset+0x0/0x98
 [&lt;0033256e&gt;] _cond_resched+0x0/0x32
 [&lt;0005f25c&gt;] SyS_init_module+0x7c/0x112
 [&lt;00002000&gt;] _start+0x0/0x8
 [&lt;00002000&gt;] _start+0x0/0x8
 [&lt;00331c82&gt;] __generic_copy_from_user+0x1e/0x46
 [&lt;0005f2b2&gt;] SyS_init_module+0xd2/0x112
 [&lt;0000465d&gt;] mangle_kernel_stack+0xcd/0xda
 [&lt;00002b40&gt;] syscall+0x8/0xc
 [&lt;0000465d&gt;] mangle_kernel_stack+0xcd/0xda
 [&lt;0008c00c&gt;] pcpu_balance_workfn+0xb2/0x40e
Code: 2200 7419 e4a9 e589 2841 d9fc 0000 1000 &lt;2414&gt; 7203 c282 7602 b681 6600 0096 0242 fe00 0482 0000 0000 e9c0 11c3 ed89 2642

There's no need to call ioremap() for the SWIM address range, as it lies
within the usual IO device region at 0x5000 0000, which has already been
mapped by head.S.

Remove the redundant ioremap() and iounmap() calls to fix the hang.

Cc: Laurent Vivier &lt;lvivier@redhat.com&gt;
Cc: stable@vger.kernel.org # v4.14+
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Acked-by: Laurent Vivier &lt;lvivier@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>block/loop: fix deadlock after loop_set_status</title>
<updated>2018-04-19T06:54:10+00:00</updated>
<author>
<name>Tetsuo Handa</name>
<email>penguin-kernel@I-love.SAKURA.ne.jp</email>
</author>
<published>2018-04-06T01:03:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=ee41198757293c783ed87c2957231198cec4367f'/>
<id>ee41198757293c783ed87c2957231198cec4367f</id>
<content type='text'>
commit 1e047eaab3bb5564f25b41e9cd3a053009f4e789 upstream.

syzbot is reporting deadlocks at __blkdev_get() [1].

----------------------------------------
[   92.493919] systemd-udevd   D12696   525      1 0x00000000
[   92.495891] Call Trace:
[   92.501560]  schedule+0x23/0x80
[   92.502923]  schedule_preempt_disabled+0x5/0x10
[   92.504645]  __mutex_lock+0x416/0x9e0
[   92.510760]  __blkdev_get+0x73/0x4f0
[   92.512220]  blkdev_get+0x12e/0x390
[   92.518151]  do_dentry_open+0x1c3/0x2f0
[   92.519815]  path_openat+0x5d9/0xdc0
[   92.521437]  do_filp_open+0x7d/0xf0
[   92.527365]  do_sys_open+0x1b8/0x250
[   92.528831]  do_syscall_64+0x6e/0x270
[   92.530341]  entry_SYSCALL_64_after_hwframe+0x42/0xb7

[   92.931922] 1 lock held by systemd-udevd/525:
[   92.933642]  #0: 00000000a2849e25 (&amp;bdev-&gt;bd_mutex){+.+.}, at: __blkdev_get+0x73/0x4f0
----------------------------------------

The reason of deadlock turned out that wait_event_interruptible() in
blk_queue_enter() got stuck with bdev-&gt;bd_mutex held at __blkdev_put()
due to q-&gt;mq_freeze_depth == 1.

----------------------------------------
[   92.787172] a.out           S12584   634    633 0x80000002
[   92.789120] Call Trace:
[   92.796693]  schedule+0x23/0x80
[   92.797994]  blk_queue_enter+0x3cb/0x540
[   92.803272]  generic_make_request+0xf0/0x3d0
[   92.807970]  submit_bio+0x67/0x130
[   92.810928]  submit_bh_wbc+0x15e/0x190
[   92.812461]  __block_write_full_page+0x218/0x460
[   92.815792]  __writepage+0x11/0x50
[   92.817209]  write_cache_pages+0x1ae/0x3d0
[   92.825585]  generic_writepages+0x5a/0x90
[   92.831865]  do_writepages+0x43/0xd0
[   92.836972]  __filemap_fdatawrite_range+0xc1/0x100
[   92.838788]  filemap_write_and_wait+0x24/0x70
[   92.840491]  __blkdev_put+0x69/0x1e0
[   92.841949]  blkdev_close+0x16/0x20
[   92.843418]  __fput+0xda/0x1f0
[   92.844740]  task_work_run+0x87/0xb0
[   92.846215]  do_exit+0x2f5/0xba0
[   92.850528]  do_group_exit+0x34/0xb0
[   92.852018]  SyS_exit_group+0xb/0x10
[   92.853449]  do_syscall_64+0x6e/0x270
[   92.854944]  entry_SYSCALL_64_after_hwframe+0x42/0xb7

[   92.943530] 1 lock held by a.out/634:
[   92.945105]  #0: 00000000a2849e25 (&amp;bdev-&gt;bd_mutex){+.+.}, at: __blkdev_put+0x3c/0x1e0
----------------------------------------

The reason of q-&gt;mq_freeze_depth == 1 turned out that loop_set_status()
forgot to call blk_mq_unfreeze_queue() at error paths for
info-&gt;lo_encrypt_type != NULL case.

----------------------------------------
[   37.509497] CPU: 2 PID: 634 Comm: a.out Tainted: G        W        4.16.0+ #457
[   37.513608] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/19/2017
[   37.518832] RIP: 0010:blk_freeze_queue_start+0x17/0x40
[   37.521778] RSP: 0018:ffffb0c2013e7c60 EFLAGS: 00010246
[   37.524078] RAX: 0000000000000000 RBX: ffff8b07b1519798 RCX: 0000000000000000
[   37.527015] RDX: 0000000000000002 RSI: ffffb0c2013e7cc0 RDI: ffff8b07b1519798
[   37.529934] RBP: ffffb0c2013e7cc0 R08: 0000000000000008 R09: 47a189966239b898
[   37.532684] R10: dad78b99b278552f R11: 9332dca72259d5ef R12: ffff8b07acd73678
[   37.535452] R13: 0000000000004c04 R14: 0000000000000000 R15: ffff8b07b841e940
[   37.538186] FS:  00007fede33b9740(0000) GS:ffff8b07b8e80000(0000) knlGS:0000000000000000
[   37.541168] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   37.543590] CR2: 00000000206fdf18 CR3: 0000000130b30006 CR4: 00000000000606e0
[   37.546410] Call Trace:
[   37.547902]  blk_freeze_queue+0x9/0x30
[   37.549968]  loop_set_status+0x67/0x3c0 [loop]
[   37.549975]  loop_set_status64+0x3b/0x70 [loop]
[   37.549986]  lo_ioctl+0x223/0x810 [loop]
[   37.549995]  blkdev_ioctl+0x572/0x980
[   37.550003]  block_ioctl+0x34/0x40
[   37.550006]  do_vfs_ioctl+0xa7/0x6d0
[   37.550017]  ksys_ioctl+0x6b/0x80
[   37.573076]  SyS_ioctl+0x5/0x10
[   37.574831]  do_syscall_64+0x6e/0x270
[   37.576769]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
----------------------------------------

[1] https://syzkaller.appspot.com/bug?id=cd662bc3f6022c0979d01a262c318fab2ee9b56f

Signed-off-by: Tetsuo Handa &lt;penguin-kernel@I-love.SAKURA.ne.jp&gt;
Reported-by: syzbot &lt;bot+48594378e9851eab70bcd6f99327c7db58c5a28a@syzkaller.appspotmail.com&gt;
Fixes: ecdd09597a572513 ("block/loop: fix race between I/O and set_status")
Cc: Ming Lei &lt;tom.leiming@gmail.com&gt;
Cc: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Cc: stable &lt;stable@vger.kernel.org&gt;
Cc: Jens Axboe &lt;axboe@fb.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 1e047eaab3bb5564f25b41e9cd3a053009f4e789 upstream.

syzbot is reporting deadlocks at __blkdev_get() [1].

----------------------------------------
[   92.493919] systemd-udevd   D12696   525      1 0x00000000
[   92.495891] Call Trace:
[   92.501560]  schedule+0x23/0x80
[   92.502923]  schedule_preempt_disabled+0x5/0x10
[   92.504645]  __mutex_lock+0x416/0x9e0
[   92.510760]  __blkdev_get+0x73/0x4f0
[   92.512220]  blkdev_get+0x12e/0x390
[   92.518151]  do_dentry_open+0x1c3/0x2f0
[   92.519815]  path_openat+0x5d9/0xdc0
[   92.521437]  do_filp_open+0x7d/0xf0
[   92.527365]  do_sys_open+0x1b8/0x250
[   92.528831]  do_syscall_64+0x6e/0x270
[   92.530341]  entry_SYSCALL_64_after_hwframe+0x42/0xb7

[   92.931922] 1 lock held by systemd-udevd/525:
[   92.933642]  #0: 00000000a2849e25 (&amp;bdev-&gt;bd_mutex){+.+.}, at: __blkdev_get+0x73/0x4f0
----------------------------------------

The reason of deadlock turned out that wait_event_interruptible() in
blk_queue_enter() got stuck with bdev-&gt;bd_mutex held at __blkdev_put()
due to q-&gt;mq_freeze_depth == 1.

----------------------------------------
[   92.787172] a.out           S12584   634    633 0x80000002
[   92.789120] Call Trace:
[   92.796693]  schedule+0x23/0x80
[   92.797994]  blk_queue_enter+0x3cb/0x540
[   92.803272]  generic_make_request+0xf0/0x3d0
[   92.807970]  submit_bio+0x67/0x130
[   92.810928]  submit_bh_wbc+0x15e/0x190
[   92.812461]  __block_write_full_page+0x218/0x460
[   92.815792]  __writepage+0x11/0x50
[   92.817209]  write_cache_pages+0x1ae/0x3d0
[   92.825585]  generic_writepages+0x5a/0x90
[   92.831865]  do_writepages+0x43/0xd0
[   92.836972]  __filemap_fdatawrite_range+0xc1/0x100
[   92.838788]  filemap_write_and_wait+0x24/0x70
[   92.840491]  __blkdev_put+0x69/0x1e0
[   92.841949]  blkdev_close+0x16/0x20
[   92.843418]  __fput+0xda/0x1f0
[   92.844740]  task_work_run+0x87/0xb0
[   92.846215]  do_exit+0x2f5/0xba0
[   92.850528]  do_group_exit+0x34/0xb0
[   92.852018]  SyS_exit_group+0xb/0x10
[   92.853449]  do_syscall_64+0x6e/0x270
[   92.854944]  entry_SYSCALL_64_after_hwframe+0x42/0xb7

[   92.943530] 1 lock held by a.out/634:
[   92.945105]  #0: 00000000a2849e25 (&amp;bdev-&gt;bd_mutex){+.+.}, at: __blkdev_put+0x3c/0x1e0
----------------------------------------

The reason of q-&gt;mq_freeze_depth == 1 turned out that loop_set_status()
forgot to call blk_mq_unfreeze_queue() at error paths for
info-&gt;lo_encrypt_type != NULL case.

----------------------------------------
[   37.509497] CPU: 2 PID: 634 Comm: a.out Tainted: G        W        4.16.0+ #457
[   37.513608] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/19/2017
[   37.518832] RIP: 0010:blk_freeze_queue_start+0x17/0x40
[   37.521778] RSP: 0018:ffffb0c2013e7c60 EFLAGS: 00010246
[   37.524078] RAX: 0000000000000000 RBX: ffff8b07b1519798 RCX: 0000000000000000
[   37.527015] RDX: 0000000000000002 RSI: ffffb0c2013e7cc0 RDI: ffff8b07b1519798
[   37.529934] RBP: ffffb0c2013e7cc0 R08: 0000000000000008 R09: 47a189966239b898
[   37.532684] R10: dad78b99b278552f R11: 9332dca72259d5ef R12: ffff8b07acd73678
[   37.535452] R13: 0000000000004c04 R14: 0000000000000000 R15: ffff8b07b841e940
[   37.538186] FS:  00007fede33b9740(0000) GS:ffff8b07b8e80000(0000) knlGS:0000000000000000
[   37.541168] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   37.543590] CR2: 00000000206fdf18 CR3: 0000000130b30006 CR4: 00000000000606e0
[   37.546410] Call Trace:
[   37.547902]  blk_freeze_queue+0x9/0x30
[   37.549968]  loop_set_status+0x67/0x3c0 [loop]
[   37.549975]  loop_set_status64+0x3b/0x70 [loop]
[   37.549986]  lo_ioctl+0x223/0x810 [loop]
[   37.549995]  blkdev_ioctl+0x572/0x980
[   37.550003]  block_ioctl+0x34/0x40
[   37.550006]  do_vfs_ioctl+0xa7/0x6d0
[   37.550017]  ksys_ioctl+0x6b/0x80
[   37.573076]  SyS_ioctl+0x5/0x10
[   37.574831]  do_syscall_64+0x6e/0x270
[   37.576769]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
----------------------------------------

[1] https://syzkaller.appspot.com/bug?id=cd662bc3f6022c0979d01a262c318fab2ee9b56f

Signed-off-by: Tetsuo Handa &lt;penguin-kernel@I-love.SAKURA.ne.jp&gt;
Reported-by: syzbot &lt;bot+48594378e9851eab70bcd6f99327c7db58c5a28a@syzkaller.appspotmail.com&gt;
Fixes: ecdd09597a572513 ("block/loop: fix race between I/O and set_status")
Cc: Ming Lei &lt;tom.leiming@gmail.com&gt;
Cc: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Cc: stable &lt;stable@vger.kernel.org&gt;
Cc: Jens Axboe &lt;axboe@fb.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>loop: Fix lost writes caused by missing flag</title>
<updated>2018-03-09T15:36:36+00:00</updated>
<author>
<name>Ross Zwisler</name>
<email>ross.zwisler@linux.intel.com</email>
</author>
<published>2018-03-09T15:36:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=1d037577c323e5090ce281e96bc313ab2eee5be2'/>
<id>1d037577c323e5090ce281e96bc313ab2eee5be2</id>
<content type='text'>
The following commit:

commit aa4d86163e4e ("block: loop: switch to VFS ITER_BVEC")

replaced __do_lo_send_write(), which used ITER_KVEC iterators, with
lo_write_bvec() which uses ITER_BVEC iterators.  In this change, though,
the WRITE flag was lost:

-       iov_iter_kvec(&amp;from, ITER_KVEC | WRITE, &amp;kvec, 1, len);
+       iov_iter_bvec(&amp;i, ITER_BVEC, bvec, 1, bvec-&gt;bv_len);

This flag is necessary for the DAX case because we make decisions based on
whether or not the iterator is a READ or a WRITE in dax_iomap_actor() and
in dax_iomap_rw().

We end up going through this path in configurations where we combine a PMEM
device with 4k sectors, a loopback device and DAX.  The consequence of this
missed flag is that what we intend as a write actually turns into a read in
the DAX code, so no data is ever written.

The very simplest test case is to create a loopback device and try and
write a small string to it, then hexdump a few bytes of the device to see
if the write took.  Without this patch you read back all zeros, with this
you read back the string you wrote.

For XFS this causes us to fail or panic during the following xfstests:

	xfs/074 xfs/078 xfs/216 xfs/217 xfs/250

For ext4 we have a similar issue where writes never happen, but we don't
currently have any xfstests that use loopback and show this issue.

Fix this by restoring the WRITE flag argument to iov_iter_bvec().  This
causes the xfstests to all pass.

Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Cc: stable@vger.kernel.org
Fixes: commit aa4d86163e4e ("block: loop: switch to VFS ITER_BVEC")
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Ming Lei &lt;ming.lei@redhat.com&gt;
Signed-off-by: Ross Zwisler &lt;ross.zwisler@linux.intel.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The following commit:

commit aa4d86163e4e ("block: loop: switch to VFS ITER_BVEC")

replaced __do_lo_send_write(), which used ITER_KVEC iterators, with
lo_write_bvec() which uses ITER_BVEC iterators.  In this change, though,
the WRITE flag was lost:

-       iov_iter_kvec(&amp;from, ITER_KVEC | WRITE, &amp;kvec, 1, len);
+       iov_iter_bvec(&amp;i, ITER_BVEC, bvec, 1, bvec-&gt;bv_len);

This flag is necessary for the DAX case because we make decisions based on
whether or not the iterator is a READ or a WRITE in dax_iomap_actor() and
in dax_iomap_rw().

We end up going through this path in configurations where we combine a PMEM
device with 4k sectors, a loopback device and DAX.  The consequence of this
missed flag is that what we intend as a write actually turns into a read in
the DAX code, so no data is ever written.

The very simplest test case is to create a loopback device and try and
write a small string to it, then hexdump a few bytes of the device to see
if the write took.  Without this patch you read back all zeros, with this
you read back the string you wrote.

For XFS this causes us to fail or panic during the following xfstests:

	xfs/074 xfs/078 xfs/216 xfs/217 xfs/250

For ext4 we have a similar issue where writes never happen, but we don't
currently have any xfstests that use loopback and show this issue.

Fix this by restoring the WRITE flag argument to iov_iter_bvec().  This
causes the xfstests to all pass.

Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Cc: stable@vger.kernel.org
Fixes: commit aa4d86163e4e ("block: loop: switch to VFS ITER_BVEC")
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Ming Lei &lt;ming.lei@redhat.com&gt;
Signed-off-by: Ross Zwisler &lt;ross.zwisler@linux.intel.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</pre>
</div>
</content>
</entry>
</feed>
