]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2019 07:36:58 +0000 (08:36 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2019 07:36:58 +0000 (08:36 +0100)
added patches:
0001-Revert-loop-Fix-double-mutex_unlock-loop_ctl_mutex-i.patch
0002-Revert-loop-Get-rid-of-loop_index_mutex.patch
0003-Revert-loop-Fold-__loop_release-into-loop_release.patch

queue-4.4/0001-Revert-loop-Fix-double-mutex_unlock-loop_ctl_mutex-i.patch [new file with mode: 0644]
queue-4.4/0002-Revert-loop-Get-rid-of-loop_index_mutex.patch [new file with mode: 0644]
queue-4.4/0003-Revert-loop-Fold-__loop_release-into-loop_release.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/0001-Revert-loop-Fix-double-mutex_unlock-loop_ctl_mutex-i.patch b/queue-4.4/0001-Revert-loop-Fix-double-mutex_unlock-loop_ctl_mutex-i.patch
new file mode 100644 (file)
index 0000000..f0e19ad
--- /dev/null
@@ -0,0 +1,37 @@
+From 2623ec7eb874e67d09e6486db5a11f6afe4821af Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Wed, 30 Jan 2019 08:33:14 +0100
+Subject: Revert "loop: Fix double mutex_unlock(&loop_ctl_mutex) in loop_control_ioctl()"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 9ec298cc874d08020f45791a8396e1593c3278c1 which is
+commit 628bd85947091830a8c4872adfd5ed1d515a9cf2 upstream.
+
+It is not needed in the 4.4.y tree at this point in time.
+
+Reported-by: Jan Kara <jack@suse.cz>
+Cc: Ming Lei <ming.lei@redhat.com>
+Cc: Jan Kara <jack@suse.cz>
+Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Cc: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/block/loop.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -1936,10 +1936,12 @@ static long loop_control_ioctl(struct fi
+                       break;
+               if (lo->lo_state != Lo_unbound) {
+                       ret = -EBUSY;
++                      mutex_unlock(&loop_ctl_mutex);
+                       break;
+               }
+               if (atomic_read(&lo->lo_refcnt) > 0) {
+                       ret = -EBUSY;
++                      mutex_unlock(&loop_ctl_mutex);
+                       break;
+               }
+               lo->lo_disk->private_data = NULL;
diff --git a/queue-4.4/0002-Revert-loop-Get-rid-of-loop_index_mutex.patch b/queue-4.4/0002-Revert-loop-Get-rid-of-loop_index_mutex.patch
new file mode 100644 (file)
index 0000000..c62b5ca
--- /dev/null
@@ -0,0 +1,159 @@
+From ddfd338e2e52e7b3b078e0d65c5f23dd38781a4c Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Wed, 30 Jan 2019 08:34:22 +0100
+Subject: Revert "loop: Get rid of loop_index_mutex"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 611f77199cd763e6b7c0462c2f199ddb3a089750 which is
+commit 0a42e99b58a208839626465af194cfe640ef9493 upstream.
+
+It is not needed in the 4.4.y tree at this time.
+
+Reported-by: Jan Kara <jack@suse.cz>
+Cc: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/block/loop.c |   39 +++++++++++++++++++--------------------
+ 1 file changed, 19 insertions(+), 20 deletions(-)
+
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -81,6 +81,7 @@
+ #include <asm/uaccess.h>
+ static DEFINE_IDR(loop_index_idr);
++static DEFINE_MUTEX(loop_index_mutex);
+ static DEFINE_MUTEX(loop_ctl_mutex);
+ static int max_part;
+@@ -1570,11 +1571,9 @@ static int lo_compat_ioctl(struct block_
+ static int lo_open(struct block_device *bdev, fmode_t mode)
+ {
+       struct loop_device *lo;
+-      int err;
++      int err = 0;
+-      err = mutex_lock_killable(&loop_ctl_mutex);
+-      if (err)
+-              return err;
++      mutex_lock(&loop_index_mutex);
+       lo = bdev->bd_disk->private_data;
+       if (!lo) {
+               err = -ENXIO;
+@@ -1583,7 +1582,7 @@ static int lo_open(struct block_device *
+       atomic_inc(&lo->lo_refcnt);
+ out:
+-      mutex_unlock(&loop_ctl_mutex);
++      mutex_unlock(&loop_index_mutex);
+       return err;
+ }
+@@ -1592,11 +1591,12 @@ static void lo_release(struct gendisk *d
+       struct loop_device *lo;
+       int err;
+-      mutex_lock(&loop_ctl_mutex);
++      mutex_lock(&loop_index_mutex);
+       lo = disk->private_data;
+       if (atomic_dec_return(&lo->lo_refcnt))
+-              goto out_unlock;
++              goto unlock_index;
++      mutex_lock(&loop_ctl_mutex);
+       if (lo->lo_flags & LO_FLAGS_AUTOCLEAR) {
+               /*
+                * In autoclear mode, stop the loop thread
+@@ -1604,7 +1604,7 @@ static void lo_release(struct gendisk *d
+                */
+               err = loop_clr_fd(lo);
+               if (!err)
+-                      return;
++                      goto unlock_index;
+       } else {
+               /*
+                * Otherwise keep thread (if running) and config,
+@@ -1613,8 +1613,9 @@ static void lo_release(struct gendisk *d
+               loop_flush(lo);
+       }
+-out_unlock:
+       mutex_unlock(&loop_ctl_mutex);
++unlock_index:
++      mutex_unlock(&loop_index_mutex);
+ }
+ static const struct block_device_operations lo_fops = {
+@@ -1896,7 +1897,7 @@ static struct kobject *loop_probe(dev_t
+       struct kobject *kobj;
+       int err;
+-      mutex_lock(&loop_ctl_mutex);
++      mutex_lock(&loop_index_mutex);
+       err = loop_lookup(&lo, MINOR(dev) >> part_shift);
+       if (err < 0)
+               err = loop_add(&lo, MINOR(dev) >> part_shift);
+@@ -1904,7 +1905,7 @@ static struct kobject *loop_probe(dev_t
+               kobj = NULL;
+       else
+               kobj = get_disk(lo->lo_disk);
+-      mutex_unlock(&loop_ctl_mutex);
++      mutex_unlock(&loop_index_mutex);
+       *part = 0;
+       return kobj;
+@@ -1914,13 +1915,9 @@ static long loop_control_ioctl(struct fi
+                              unsigned long parm)
+ {
+       struct loop_device *lo;
+-      int ret;
+-
+-      ret = mutex_lock_killable(&loop_ctl_mutex);
+-      if (ret)
+-              return ret;
++      int ret = -ENOSYS;
+-      ret = -ENOSYS;
++      mutex_lock(&loop_index_mutex);
+       switch (cmd) {
+       case LOOP_CTL_ADD:
+               ret = loop_lookup(&lo, parm);
+@@ -1934,6 +1931,7 @@ static long loop_control_ioctl(struct fi
+               ret = loop_lookup(&lo, parm);
+               if (ret < 0)
+                       break;
++              mutex_lock(&loop_ctl_mutex);
+               if (lo->lo_state != Lo_unbound) {
+                       ret = -EBUSY;
+                       mutex_unlock(&loop_ctl_mutex);
+@@ -1945,6 +1943,7 @@ static long loop_control_ioctl(struct fi
+                       break;
+               }
+               lo->lo_disk->private_data = NULL;
++              mutex_unlock(&loop_ctl_mutex);
+               idr_remove(&loop_index_idr, lo->lo_number);
+               loop_remove(lo);
+               break;
+@@ -1954,7 +1953,7 @@ static long loop_control_ioctl(struct fi
+                       break;
+               ret = loop_add(&lo, -1);
+       }
+-      mutex_unlock(&loop_ctl_mutex);
++      mutex_unlock(&loop_index_mutex);
+       return ret;
+ }
+@@ -2037,10 +2036,10 @@ static int __init loop_init(void)
+                                 THIS_MODULE, loop_probe, NULL, NULL);
+       /* pre-create number of devices given by config or max_loop */
+-      mutex_lock(&loop_ctl_mutex);
++      mutex_lock(&loop_index_mutex);
+       for (i = 0; i < nr; i++)
+               loop_add(&lo, i);
+-      mutex_unlock(&loop_ctl_mutex);
++      mutex_unlock(&loop_index_mutex);
+       printk(KERN_INFO "loop: module loaded\n");
+       return 0;
diff --git a/queue-4.4/0003-Revert-loop-Fold-__loop_release-into-loop_release.patch b/queue-4.4/0003-Revert-loop-Fold-__loop_release-into-loop_release.patch
new file mode 100644 (file)
index 0000000..e1fe8f9
--- /dev/null
@@ -0,0 +1,62 @@
+From 59e47456ae11932dfb970f78e644d01d487c4506 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Wed, 30 Jan 2019 08:35:00 +0100
+Subject: Revert "loop: Fold __loop_release into loop_release"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 4ee414c3b6021db621901f2697d35774926268f6 which is
+commit 967d1dc144b50ad005e5eecdfadfbcfb399ffff6 upstream.
+
+It is not needed in the 4.4.y tree at this time.
+
+Reported-by: Jan Kara <jack@suse.cz>
+Cc: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/block/loop.c |   16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -1586,15 +1586,12 @@ out:
+       return err;
+ }
+-static void lo_release(struct gendisk *disk, fmode_t mode)
++static void __lo_release(struct loop_device *lo)
+ {
+-      struct loop_device *lo;
+       int err;
+-      mutex_lock(&loop_index_mutex);
+-      lo = disk->private_data;
+       if (atomic_dec_return(&lo->lo_refcnt))
+-              goto unlock_index;
++              return;
+       mutex_lock(&loop_ctl_mutex);
+       if (lo->lo_flags & LO_FLAGS_AUTOCLEAR) {
+@@ -1604,7 +1601,7 @@ static void lo_release(struct gendisk *d
+                */
+               err = loop_clr_fd(lo);
+               if (!err)
+-                      goto unlock_index;
++                      return;
+       } else {
+               /*
+                * Otherwise keep thread (if running) and config,
+@@ -1614,7 +1611,12 @@ static void lo_release(struct gendisk *d
+       }
+       mutex_unlock(&loop_ctl_mutex);
+-unlock_index:
++}
++
++static void lo_release(struct gendisk *disk, fmode_t mode)
++{
++      mutex_lock(&loop_index_mutex);
++      __lo_release(disk->private_data);
+       mutex_unlock(&loop_index_mutex);
+ }
index cd0140792b33c3fc0ca3062115753bce99221a40..781eb37ca7548f0e5ebaeea59c2efdd417670b70 100644 (file)
@@ -27,3 +27,6 @@ irqchip-gic-v3-its-align-pci-multi-msi-allocation-on-their-size.patch
 s390-smp-fix-calling-smp_call_ipl_cpu-from-ipl-cpu.patch
 arm64-mm-remove-page_mapping-check-in-__sync_icache_dcache.patch
 f2fs-read-page-index-before-freeing.patch
+0001-Revert-loop-Fix-double-mutex_unlock-loop_ctl_mutex-i.patch
+0002-Revert-loop-Get-rid-of-loop_index_mutex.patch
+0003-Revert-loop-Fold-__loop_release-into-loop_release.patch