From: Greg Kroah-Hartman Date: Wed, 30 Jan 2019 07:36:58 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v4.9.154~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9080a97ca49af604ac7cd613849ac8587aa3ddbc;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches 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 --- 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 index 00000000000..f0e19ada1eb --- /dev/null +++ b/queue-4.4/0001-Revert-loop-Fix-double-mutex_unlock-loop_ctl_mutex-i.patch @@ -0,0 +1,37 @@ +From 2623ec7eb874e67d09e6486db5a11f6afe4821af Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +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 + +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 +Cc: Ming Lei +Cc: Jan Kara +Cc: Tetsuo Handa +Cc: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..c62b5caf578 --- /dev/null +++ b/queue-4.4/0002-Revert-loop-Get-rid-of-loop_index_mutex.patch @@ -0,0 +1,159 @@ +From ddfd338e2e52e7b3b078e0d65c5f23dd38781a4c Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Wed, 30 Jan 2019 08:34:22 +0100 +Subject: Revert "loop: Get rid of loop_index_mutex" + +From: Greg Kroah-Hartman + +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 +Cc: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + 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 + + 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 index 00000000000..e1fe8f9112e --- /dev/null +++ b/queue-4.4/0003-Revert-loop-Fold-__loop_release-into-loop_release.patch @@ -0,0 +1,62 @@ +From 59e47456ae11932dfb970f78e644d01d487c4506 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Wed, 30 Jan 2019 08:35:00 +0100 +Subject: Revert "loop: Fold __loop_release into loop_release" + +From: Greg Kroah-Hartman + +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 +Cc: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + 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); + } + diff --git a/queue-4.4/series b/queue-4.4/series index cd0140792b3..781eb37ca75 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -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