mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge tag 'ASB-2024-10-05_11-5.4' of https://android.googlesource.com/kernel/common into android13-5.4-lahaina
https://source.android.com/docs/security/bulletin/2024-10-01 * tag 'ASB-2024-10-05_11-5.4' of https://android.googlesource.com/kernel/common: (397 commits) Linux 5.4.283 scsi: aacraid: Fix double-free on probe failure net: dsa: mv8e6xxx: Fix stub function parameters usb: core: sysfs: Unmerge @usb3_hardware_lpm_attr_group in remove_power_attributes() usb: dwc3: st: add missing depopulate in probe error path usb: dwc3: st: fix probed platform device ref count on probe error path usb: dwc3: core: Prevent USB core invalid event buffer address access usb: dwc3: omap: add missing depopulate in probe error path USB: serial: option: add MeiG Smart SRM825L cdc-acm: Add DISABLE_ECHO quirk for GE HealthCare UI Controller soc: qcom: cmd-db: Map shared memory as WC, not WB nfc: pn533: Add poll mod list filling check nfc: pn533: Add autopoll capability nfc: pn533: Add dev_up/dev_down hooks to phy_ops net: busy-poll: use ktime_get_ns() instead of local_clock() gtp: fix a potential NULL pointer dereference ethtool: check device is present when getting link settings r8152: Factor out OOB link list waits soundwire: stream: fix programming slave ports for non-continous port maps net:rds: Fix possible deadlock in rds_message_put ... Change-Id: Ia6559a770f5db990f2bf6e5a034c63e3d7df4510
This commit is contained in:
commit
a421f676d6
376 changed files with 3731 additions and 1792 deletions
|
|
@ -366,7 +366,7 @@ enum rbd_watch_state {
|
|||
enum rbd_lock_state {
|
||||
RBD_LOCK_STATE_UNLOCKED,
|
||||
RBD_LOCK_STATE_LOCKED,
|
||||
RBD_LOCK_STATE_RELEASING,
|
||||
RBD_LOCK_STATE_QUIESCING,
|
||||
};
|
||||
|
||||
/* WatchNotify::ClientId */
|
||||
|
|
@ -427,7 +427,7 @@ struct rbd_device {
|
|||
struct list_head running_list;
|
||||
struct completion acquire_wait;
|
||||
int acquire_err;
|
||||
struct completion releasing_wait;
|
||||
struct completion quiescing_wait;
|
||||
|
||||
spinlock_t object_map_lock;
|
||||
u8 *object_map;
|
||||
|
|
@ -519,7 +519,7 @@ static bool __rbd_is_lock_owner(struct rbd_device *rbd_dev)
|
|||
lockdep_assert_held(&rbd_dev->lock_rwsem);
|
||||
|
||||
return rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED ||
|
||||
rbd_dev->lock_state == RBD_LOCK_STATE_RELEASING;
|
||||
rbd_dev->lock_state == RBD_LOCK_STATE_QUIESCING;
|
||||
}
|
||||
|
||||
static bool rbd_is_lock_owner(struct rbd_device *rbd_dev)
|
||||
|
|
@ -3608,13 +3608,14 @@ static void rbd_lock_del_request(struct rbd_img_request *img_req)
|
|||
lockdep_assert_held(&rbd_dev->lock_rwsem);
|
||||
spin_lock(&rbd_dev->lock_lists_lock);
|
||||
if (!list_empty(&img_req->lock_item)) {
|
||||
rbd_assert(!list_empty(&rbd_dev->running_list));
|
||||
list_del_init(&img_req->lock_item);
|
||||
need_wakeup = (rbd_dev->lock_state == RBD_LOCK_STATE_RELEASING &&
|
||||
need_wakeup = (rbd_dev->lock_state == RBD_LOCK_STATE_QUIESCING &&
|
||||
list_empty(&rbd_dev->running_list));
|
||||
}
|
||||
spin_unlock(&rbd_dev->lock_lists_lock);
|
||||
if (need_wakeup)
|
||||
complete(&rbd_dev->releasing_wait);
|
||||
complete(&rbd_dev->quiescing_wait);
|
||||
}
|
||||
|
||||
static int rbd_img_exclusive_lock(struct rbd_img_request *img_req)
|
||||
|
|
@ -3627,11 +3628,6 @@ static int rbd_img_exclusive_lock(struct rbd_img_request *img_req)
|
|||
if (rbd_lock_add_request(img_req))
|
||||
return 1;
|
||||
|
||||
if (rbd_dev->opts->exclusive) {
|
||||
WARN_ON(1); /* lock got released? */
|
||||
return -EROFS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note the use of mod_delayed_work() in rbd_acquire_lock()
|
||||
* and cancel_delayed_work() in wake_lock_waiters().
|
||||
|
|
@ -4281,16 +4277,16 @@ static bool rbd_quiesce_lock(struct rbd_device *rbd_dev)
|
|||
/*
|
||||
* Ensure that all in-flight IO is flushed.
|
||||
*/
|
||||
rbd_dev->lock_state = RBD_LOCK_STATE_RELEASING;
|
||||
rbd_assert(!completion_done(&rbd_dev->releasing_wait));
|
||||
rbd_dev->lock_state = RBD_LOCK_STATE_QUIESCING;
|
||||
rbd_assert(!completion_done(&rbd_dev->quiescing_wait));
|
||||
if (list_empty(&rbd_dev->running_list))
|
||||
return true;
|
||||
|
||||
up_write(&rbd_dev->lock_rwsem);
|
||||
wait_for_completion(&rbd_dev->releasing_wait);
|
||||
wait_for_completion(&rbd_dev->quiescing_wait);
|
||||
|
||||
down_write(&rbd_dev->lock_rwsem);
|
||||
if (rbd_dev->lock_state != RBD_LOCK_STATE_RELEASING)
|
||||
if (rbd_dev->lock_state != RBD_LOCK_STATE_QUIESCING)
|
||||
return false;
|
||||
|
||||
rbd_assert(list_empty(&rbd_dev->running_list));
|
||||
|
|
@ -4701,6 +4697,10 @@ static void rbd_reacquire_lock(struct rbd_device *rbd_dev)
|
|||
rbd_warn(rbd_dev, "failed to update lock cookie: %d",
|
||||
ret);
|
||||
|
||||
if (rbd_dev->opts->exclusive)
|
||||
rbd_warn(rbd_dev,
|
||||
"temporarily releasing lock on exclusive mapping");
|
||||
|
||||
/*
|
||||
* Lock cookie cannot be updated on older OSDs, so do
|
||||
* a manual release and queue an acquire.
|
||||
|
|
@ -5556,7 +5556,7 @@ static struct rbd_device *__rbd_dev_create(struct rbd_spec *spec)
|
|||
INIT_LIST_HEAD(&rbd_dev->acquiring_list);
|
||||
INIT_LIST_HEAD(&rbd_dev->running_list);
|
||||
init_completion(&rbd_dev->acquire_wait);
|
||||
init_completion(&rbd_dev->releasing_wait);
|
||||
init_completion(&rbd_dev->quiescing_wait);
|
||||
|
||||
spin_lock_init(&rbd_dev->object_map_lock);
|
||||
|
||||
|
|
@ -6618,11 +6618,6 @@ static int rbd_add_acquire_lock(struct rbd_device *rbd_dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* The lock may have been released by now, unless automatic lock
|
||||
* transitions are disabled.
|
||||
*/
|
||||
rbd_assert(!rbd_dev->opts->exclusive || rbd_is_lock_owner(rbd_dev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue