| Age | Commit message (Expand) | Author | Files | Lines |
| 2026-03-05 | block: use trylock to avoid lockdep circular dependency in sysfs | Ming Lei | 1 | -1/+11 |
| 2026-02-03 | blk-mq: add a new queue sysfs attribute async_depth | Yu Kuai | 1 | -0/+1 |
| 2025-12-12 | block: fix race between wbt_enable_default and IO submission | Ming Lei | 1 | -4/+0 |
| 2025-11-13 | block: use {alloc|free}_sched data methods | Nilay Shroff | 1 | -12/+22 |
| 2025-11-13 | block: move elevator tags into struct elevator_resources | Nilay Shroff | 1 | -15/+16 |
| 2025-11-13 | block: unify elevator tags and type xarrays into struct elv_change_ctx | Nilay Shroff | 1 | -24/+7 |
| 2025-09-10 | blk-mq-sched: add new parameter nr_requests in blk_mq_alloc_sched_tags() | Yu Kuai | 1 | -1/+2 |
| 2025-07-30 | block: fix potential deadlock while running nr_hw_queue update | Nilay Shroff | 1 | -9/+6 |
| 2025-07-30 | block: fix lockdep warning caused by lock dependency in elv_iosched_store | Nilay Shroff | 1 | -6/+34 |
| 2025-07-30 | block: move elevator queue allocation logic into blk_mq_init_sched | Nilay Shroff | 1 | -1/+0 |
| 2025-07-28 | Merge tag 'for-6.17/block-20250728' of git://git.kernel.dk/linux | Linus Torvalds | 1 | -5/+5 |
| 2025-07-25 | block: restore two stage elevator switch while running nr_hw_queue update | Nilay Shroff | 1 | -5/+5 |
| 2025-07-20 | block: fix module reference leak in mq-deadline I/O scheduler | Nilay Shroff | 1 | -6/+13 |
| 2025-05-15 | block: fix elv_update_nr_hw_queues() to reattach elevator | Nilay Shroff | 1 | -1/+1 |
| 2025-05-06 | block: move wbt_enable_default() out of queue freezing from sched ->exit() | Ming Lei | 1 | -0/+5 |
| 2025-05-06 | block: move elv_register[unregister]_queue out of elevator_lock | Ming Lei | 1 | -16/+52 |
| 2025-05-06 | block: add new helper for disabling elevator switch when deleting disk | Ming Lei | 1 | -3/+10 |
| 2025-05-06 | block: fail to show/store elevator sysfs attribute if elevator is dying | Ming Lei | 1 | -4/+6 |
| 2025-05-06 | block: remove elevator queue's type check in elv_attr_show/store() | Ming Lei | 1 | -2/+2 |
| 2025-05-06 | block: pass elevator_queue to elv_register_queue & unregister_queue | Ming Lei | 1 | -7/+7 |
| 2025-05-06 | block: unifying elevator change | Ming Lei | 1 | -63/+53 |
| 2025-05-06 | block: add `struct elv_change_ctx` for unifying elevator change | Ming Lei | 1 | -16/+23 |
| 2025-05-06 | block: move queue freezing & elevator_lock into elevator_change() | Ming Lei | 1 | -8/+12 |
| 2025-05-06 | block: simplify elevator reattachment for updating nr_hw_queues | Ming Lei | 1 | -1/+19 |
| 2025-05-06 | block: move blk_queue_registered() check into elv_iosched_store() | Ming Lei | 1 | -4/+4 |
| 2025-05-06 | block: fold elevator_disable into elevator_switch | Christoph Hellwig | 1 | -38/+23 |
| 2025-05-06 | block: look up the elevator type in elevator_switch | Christoph Hellwig | 1 | -10/+8 |
| 2025-05-06 | block: don't allow to switch elevator if updating nr_hw_queues is in-progress | Ming Lei | 1 | -0/+3 |
| 2025-05-06 | block: move sched debugfs register into elvevator_register_queue | Ming Lei | 1 | -0/+8 |
| 2025-05-06 | block: use q->elevator with ->elevator_lock held in elv_iosched_show() | Ming Lei | 1 | -2/+1 |
| 2025-05-06 | block: don't call freeze queue in elevator_switch() and elevator_disable() | Ming Lei | 1 | -7/+2 |
| 2025-03-10 | block: introduce a dedicated lock for protecting queue elevator updates | Nilay Shroff | 1 | -19/+16 |
| 2025-03-10 | block: move q->sysfs_lock and queue-freeze under show/store method | Nilay Shroff | 1 | -2/+18 |
| 2025-01-31 | block: force noio scope in blk_mq_freeze_queue | Christoph Hellwig | 1 | -6/+10 |
| 2025-01-06 | block: remove BLK_MQ_F_NO_SCHED | Christoph Hellwig | 1 | -20/+0 |
| 2025-01-02 | elevator: Enable const sysfs attributes | Thomas Weißschuh | 1 | -4/+4 |
| 2024-12-23 | block: don't verify queue freeze manually in elevator_init_mq() | Ming Lei | 1 | -5/+2 |
| 2024-12-23 | block: track disk DEAD state automatically for modeling queue freeze lockdep | Ming Lei | 1 | -2/+2 |
| 2024-11-07 | block: don't verify IO lock for freeze/unfreeze in elevator_init_mq() | Ming Lei | 1 | -2/+8 |
| 2024-10-22 | block: return void from the queue_sysfs_entry load_module method | Christoph Hellwig | 1 | -5/+3 |
| 2024-10-11 | elevator: Remove argument from elevator_find_get | Breno Leitao | 1 | -4/+3 |
| 2024-10-11 | elevator: do not request_module if elevator exists | Breno Leitao | 1 | -1/+9 |
| 2024-10-07 | block: Fix elevator_get_default() checking for NULL q->tag_set | SurajSonawane2415 | 1 | -2/+2 |
| 2024-09-17 | block: Fix elv_iosched_local_module handling of "none" scheduler | Damien Le Moal | 1 | -1/+3 |
| 2024-09-10 | block: Prevent deadlocks when switching elevators | Damien Le Moal | 1 | -6/+15 |
| 2024-06-28 | block: pass a gendisk to the queue_sysfs_entry methods | Christoph Hellwig | 1 | -4/+5 |
| 2024-04-17 | block: Remove elevator required features | Damien Le Moal | 1 | -41/+5 |
| 2023-08-19 | blk-mq: release scheduler resource when request completes | Chengming Zhou | 1 | -0/+3 |
| 2023-06-01 | block: Replace all non-returning strlcpy with strscpy | Azeem Shaikh | 1 | -1/+1 |
| 2023-02-09 | block: make kobj_type structures constant | Thomas Weißschuh | 1 | -2/+2 |
| 2022-11-30 | block: untangle request_queue refcounting from sysfs | Christoph Hellwig | 1 | -1/+1 |
| 2022-11-29 | block: use bool as the return type of elv_iosched_allow_bio_merge | Jinlong Chen | 1 | -2/+2 |
| 2022-11-29 | block: replace "len+name" with "name+len" in elv_iosched_show | Jinlong Chen | 1 | -1/+1 |
| 2022-11-29 | block: always use 'e' when printing scheduler name | Jinlong Chen | 1 | -1/+1 |
| 2022-11-29 | block: replace continue with else-if in elv_iosched_show | Jinlong Chen | 1 | -4/+2 |
| 2022-11-29 | block: include 'none' for initial elv_iosched_show call | Jinlong Chen | 1 | -5/+4 |
| 2022-11-23 | elevator: remove an outdated comment in elevator_change | Jinlong Chen | 1 | -3/+0 |
| 2022-11-23 | elevator: update the document of elevator_match | Jinlong Chen | 1 | -3/+2 |
| 2022-11-23 | elevator: printk a warning if switching to a new io scheduler fails | Jinlong Chen | 1 | -0/+6 |
| 2022-11-23 | elevator: update the document of elevator_switch | Jinlong Chen | 1 | -4/+4 |
| 2022-11-07 | block: Fix some kernel-doc comments | Yang Li | 1 | -1/+0 |
| 2022-11-01 | block: split elevator_switch | Christoph Hellwig | 1 | -39/+38 |
| 2022-11-01 | block: don't check for required features in elevator_match | Christoph Hellwig | 1 | -35/+16 |
| 2022-11-01 | block: simplify the check for the current elevator in elv_iosched_show | Christoph Hellwig | 1 | -1/+1 |
| 2022-11-01 | block: cleanup the variable naming in elv_iosched_store | Christoph Hellwig | 1 | -9/+8 |
| 2022-11-01 | block: exit elv_iosched_show early when I/O schedulers are not supported | Christoph Hellwig | 1 | -3/+2 |
| 2022-11-01 | block: cleanup elevator_get | Christoph Hellwig | 1 | -15/+10 |
| 2022-10-23 | block: fix up elevator_type refcounting | Jinlong Chen | 1 | -3/+7 |
| 2022-10-23 | block: check for an unchanged elevator earlier in __elevator_change | Jinlong Chen | 1 | -6/+3 |
| 2022-10-23 | block: sanitize the elevator name before passing it to __elevator_change | Christoph Hellwig | 1 | -8/+7 |
| 2022-10-23 | block: add proper helpers for elevator_type module refcount management | Christoph Hellwig | 1 | -7/+2 |
| 2022-10-23 | elevator: add new field flags in struct elevator_queue | Yu Kuai | 1 | -4/+2 |
| 2022-10-23 | elevator: remove redundant code in elv_unregister_queue() | Yu Kuai | 1 | -2/+0 |
| 2022-09-27 | blk-mq: use quiesced elevator switch when reinitializing queues | Keith Busch | 1 | -2/+2 |
| 2022-03-21 | Merge tag 'for-5.18/block-2022-03-18' of git://git.kernel.dk/linux-block | Linus Torvalds | 1 | -8/+8 |
| 2022-03-08 | block: do more work in elevator_exit | Christoph Hellwig | 1 | -3/+3 |
| 2022-02-28 | block: simplify calling convention of elv_unregister_queue() | Eric Biggers | 1 | -4/+4 |
| 2022-02-17 | block/wbt: fix negative inflight counter when remove scsi device | Laibin Qiu | 1 | -2/+0 |
| 2022-02-11 | block: partition include/linux/blk-cgroup.h | Ming Lei | 1 | -1/+1 |
| 2021-11-29 | block: remove the e argument to elevator_exit | Christoph Hellwig | 1 | -3/+5 |
| 2021-11-29 | block: remove elevator_exit | Christoph Hellwig | 1 | -1/+3 |
| 2021-11-17 | block: avoid to quiesce queue in elevator_init_mq | Ming Lei | 1 | -2/+8 |
| 2021-10-18 | blk-mq: Change shared sbitmap naming to shared tags | John Garry | 1 | -1/+1 |
| 2021-10-18 | block: move elevator.h to block/ | Christoph Hellwig | 1 | -1/+1 |
| 2021-08-09 | block: return ELEVATOR_DISCARD_MERGE if possible | Ming Lei | 1 | -0/+3 |
| 2021-08-09 | block: remove support for delayed queue registrations | Christoph Hellwig | 1 | -1/+0 |
| 2021-08-05 | blk-mq: Introduce the BLK_MQ_F_NO_SCHED_BY_DEFAULT flag | Bart Van Assche | 1 | -0/+3 |
| 2021-06-24 | blk: Fix lock inversion between ioc lock and bfqd lock | Jan Kara | 1 | -3/+8 |
| 2021-06-18 | block: Remove unnecessary elevator operation checks | Damien Le Moal | 1 | -0/+4 |
| 2021-06-11 | blk-mq: improve the blk_mq_init_allocated_queue interface | Christoph Hellwig | 1 | -1/+1 |
| 2021-04-07 | blk-mq: set default elevator as deadline in case of hctx shared tagset | Ming Lei | 1 | -1/+2 |
| 2020-10-09 | block: fix comment and add lockdep assert | Yufen Yu | 1 | -10/+4 |
| 2020-10-09 | block: use helper function to test queue register | Yufen Yu | 1 | -1/+1 |
| 2020-10-09 | block: remove redundant mq check | Yufen Yu | 1 | -2/+2 |
| 2020-10-09 | block: invoke blk_mq_exit_sched no matter whether have .exit_sched | Yufen Yu | 1 | -2/+1 |
| 2020-07-31 | block: elevator: delete duplicated word and fix typos | Randy Dunlap | 1 | -2/+2 |
| 2019-11-07 | Merge branch 'for-linus' into for-5.5/block | Jens Axboe | 1 | -1/+2 |
| 2019-11-06 | block: Warn if elevator= parameter is used | Jan Kara | 1 | -0/+9 |
| 2019-10-14 | block: Fix elv_support_iosched() | Damien Le Moal | 1 | -1/+2 |
| 2019-09-26 | block: don't release queue's sysfs lock during switching elevator | Ming Lei | 1 | -30/+1 |
| 2019-09-06 | block: fix elevator_get_by_features() | Jens Axboe | 1 | -6/+7 |
| 2019-09-05 | block: Delay default elevator initialization | Damien Le Moal | 1 | -0/+7 |
| 2019-09-05 | block: Improve default elevator selection | Damien Le Moal | 1 | -7/+44 |
| 2019-09-05 | block: Introduce elevator features | Damien Le Moal | 1 | -11/+38 |
| 2019-09-05 | block: Change elevator_init_mq() to always succeed | Damien Le Moal | 1 | -11/+12 |
| 2019-09-05 | block: Cleanup elevator_init_mq() use | Damien Le Moal | 1 | -10/+13 |
| 2019-09-03 | block: elevator.c: Remove now unused elevator= argument | Marcos Paulo de Souza | 1 | -14/+0 |
| 2019-08-27 | block: split .sysfs_lock into two locks | Ming Lei | 1 | -8/+47 |
| 2019-08-27 | block: add helper for checking if queue is registered | Ming Lei | 1 | -1/+1 |
| 2019-08-27 | block: don't hold q->sysfs_lock in elevator_init_mq | Ming Lei | 1 | -9/+5 |
| 2019-06-06 | block: free sched's request pool in blk_cleanup_queue | Ming Lei | 1 | -1/+1 |
| 2019-04-30 | block: add SPDX tags to block layer files missing licensing information | Christoph Hellwig | 1 | -0/+1 |
| 2019-04-08 | block: remove unused variable 'def' | Hisao Tanabe | 1 | -4/+2 |
| 2019-02-11 | block: avoid setting none scheduler if it's already none | Aleksei Zakharov | 1 | -1/+4 |
| 2018-11-16 | block: add queue_is_mq() helper | Jens Axboe | 1 | -6/+5 |
| 2018-11-14 | block: clean up dead code that is now redundant | Colin Ian King | 1 | -7/+0 |
| 2018-11-07 | block: get rid of MQ scheduler ops union | Jens Axboe | 1 | -13/+13 |
| 2018-11-07 | block: remove dead elevator code | Jens Axboe | 1 | -355/+22 |
| 2018-11-07 | block: remove legacy IO schedulers | Jens Axboe | 1 | -70/+0 |
| 2018-10-01 | Merge tag 'v4.19-rc6' into for-4.20/block | Jens Axboe | 1 | -1/+1 |
| 2018-09-26 | block: fix deadline elevator drain for zoned block devices | Damien Le Moal | 1 | -1/+1 |
| 2018-09-26 | block: Schedule runtime resume earlier | Bart Van Assche | 1 | -1/+0 |
| 2018-09-26 | block: Split blk_pm_add_request() and blk_pm_put_request() | Bart Van Assche | 1 | -0/+1 |
| 2018-09-26 | block: Move power management code into a new source file | Bart Van Assche | 1 | -21/+1 |
| 2018-08-27 | block: remove unnecessary condition check | Chengguang Xu | 1 | -2/+1 |
| 2018-08-21 | blk-mq: init hctx sched after update ctx and hctx mapping | Jianchao Wang | 1 | -8/+12 |
| 2018-06-01 | block: split the blk-mq case from elevator_init | Christoph Hellwig | 1 | -31/+46 |
| 2018-06-01 | block: move sysfs_lock into elevator_init | Christoph Hellwig | 1 | -5/+6 |
| 2018-06-01 | block: remove the always unused name argument to elevator_init | Christoph Hellwig | 1 | -8/+2 |
| 2018-06-01 | block: unexport elevator_init/exit | Christoph Hellwig | 1 | -2/+0 |
| 2018-06-01 | block: move initialization of elevator-related fields to blk_alloc_queue_node | Christoph Hellwig | 1 | -5/+0 |
| 2018-01-18 | block: Document scheduler modification locking requirements | Bart Van Assche | 1 | -0/+8 |
| 2018-01-18 | block: Unexport elv_register_queue() and elv_unregister_queue() | Bart Van Assche | 1 | -2/+0 |
| 2018-01-06 | blk-mq: quiesce queue during switching io sched and updating nr_requests | Ming Lei | 1 | -0/+2 |
| 2017-10-25 | elevator: allow name aliases | Jens Axboe | 1 | -6/+17 |
| 2017-10-25 | elevator: lookup mq vs non-mq elevators | Jens Axboe | 1 | -23/+21 |
| 2017-10-05 | block: remove QUEUE_FLAG_STACKABLE | Christoph Hellwig | 1 | -1/+1 |
| 2017-08-28 | block: fix warning when I/O elevator is changed as request_queue is being rem... | David Jeffery | 1 | -0/+4 |
| 2017-06-21 | block: Add fallthrough markers to switch statements | Bart Van Assche | 1 | -0/+1 |
| 2017-05-10 | elevator: remove redundant warnings on IO scheduler switch | Jens Axboe | 1 | -4/+1 |
| 2017-05-02 | block: don't call blk_mq_quiesce_queue() after queue is frozen | Ming Lei | 1 | -3/+0 |
| 2017-05-02 | block: Remove elevator_change() | Bart Van Assche | 1 | -13/+0 |
| 2017-05-01 | Merge branch 'for-4.12/block' of git://git.kernel.dk/linux-block | Linus Torvalds | 1 | -0/+3 |
| 2017-04-19 | block: respect BLK_MQ_F_NO_SCHED | Ming Lei | 1 | -2/+10 |
| 2017-04-19 | block: Make writeback throttling defaults consistent for SQ devices | Jan Kara | 1 | -0/+3 |
| 2017-04-07 | blk-mq-sched: fix crash in switch error path | Omar Sandoval | 1 | -41/+53 |
| 2017-04-07 | blk-mq-sched: refactor scheduler initialization | Omar Sandoval | 1 | -20/+12 |
| 2017-03-02 | block: don't call ioc_exit_icq() with the queue lock held for blk-mq | Jens Axboe | 1 | -2/+0 |
| 2017-02-22 | block: get rid of blk-mq default scheduler choice Kconfig entries | Jens Axboe | 1 | -6/+13 |
| 2017-02-17 | Merge branch 'for-4.11/next' into for-4.11/linus-merge | Jens Axboe | 1 | -7/+9 |
| 2017-02-14 | elevator: fix loading wrong elevator type for blk-mq devices | Jens Axboe | 1 | -4/+5 |
| 2017-02-08 | block: enumify ELEVATOR_*_MERGE | Christoph Hellwig | 1 | -4/+6 |
| 2017-02-01 | blk-mq-debug: Avoid that sparse complains about req_flags_t usage | Bart Van Assche | 1 | -1/+1 |
| 2017-01-31 | block: introduce blk_rq_is_passthrough | Christoph Hellwig | 1 | -2/+2 |
| 2017-01-19 | elevator: fix unnecessary put of elevator in failure case | Jens Axboe | 1 | -4/+0 |
| 2017-01-17 | blk-mq-sched: allow setting of default IO scheduler | Jens Axboe | 1 | -1/+7 |
| 2017-01-17 | blk-mq-sched: add framework for MQ capable IO schedulers | Jens Axboe | 1 | -44/+158 |
| 2017-01-17 | block: move existing elevator ops to union | Jens Axboe | 1 | -30/+30 |
| 2016-12-09 | elevator: make the rqhash helpers exported | Jens Axboe | 1 | -4/+4 |
| 2016-10-28 | block: better op and flags encoding | Christoph Hellwig | 1 | -2/+2 |
| 2016-10-28 | block: split out request-only flags into a new namespace | Christoph Hellwig | 1 | -17/+15 |
| 2016-08-16 | block: Fix secure erase | Adrian Hunter | 1 | -1/+1 |
| 2016-07-20 | block: do not merge requests without consulting with io scheduler | Tahsin Erdogan | 1 | -11/+11 |
| 2016-06-07 | block: prepare elevator to use REQ_OPs. | Mike Christie | 1 | -4/+3 |
| 2015-10-21 | block: check bio_mergeable() early before merging | Ming Lei | 1 | -1/+1 |
| 2015-06-25 | Merge branch 'for-4.2/writeback' of git://git.kernel.dk/linux-block | Linus Torvalds | 1 | -1/+1 |
| 2015-06-25 | Merge branch 'for-4.2/core' of git://git.kernel.dk/linux-block | Linus Torvalds | 1 | -0/+2 |
| 2015-06-10 | cfq-iosched: fix the setting of IOPS mode on SSDs | Jens Axboe | 1 | -0/+2 |
| 2015-06-02 | blkcg: move block/blk-cgroup.h to include/linux/blk-cgroup.h | Tejun Heo | 1 | -1/+1 |
| 2015-04-23 | elevator: fix double release of elevator module | Chao Yu | 1 | -5/+1 |
| 2014-12-04 | block / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM | Rafael J. Wysocki | 1 | -1/+1 |
| 2014-10-23 | block: fix wrong error return in elevator_init() | Sudip Mukherjee | 1 | -1/+3 |
| 2014-06-22 | Revert "block: add __init to elv_register" | Jens Axboe | 1 | -1/+1 |
| 2014-06-11 | block: remove elv_abort_queue and blk_abort_flushes | Christoph Hellwig | 1 | -20/+0 |
| 2014-06-10 | block: add __init to elv_register | Fabian Frederick | 1 | -1/+1 |
| 2014-04-09 | block: fix regression with block enabled tagging | Jens Axboe | 1 | -0/+2 |
| 2013-11-23 | block: Abstract out bvec iterator | Kent Overstreet | 1 | -1/+1 |
| 2013-11-08 | elevator: acquire q->sysfs_lock in elevator_change() | Tomoki Sekiyama | 1 | -2/+14 |
| 2013-11-08 | elevator: Fix a race in elevator switching and md device initialization | Tomoki Sekiyama | 1 | -0/+6 |
| 2013-09-11 | block: Convert kmalloc_node(...GFP_ZERO...) to kzalloc_node(...) | Joe Perches | 1 | -1/+1 |
| 2013-07-03 | elevator: Fix a race in elevator switching | Jianpeng Ma | 1 | -20/+5 |
| 2013-03-22 | block: implement runtime pm strategy | Lin Ming | 1 | -0/+26 |
| 2013-02-28 | Merge branch 'for-3.9/core' of git://git.kernel.dk/linux-block | Linus Torvalds | 1 | -19/+4 |
| 2013-02-27 | hlist: drop the node parameter from iterators | Sasha Levin | 1 | -2/+2 |
| 2013-01-22 | block: don't request module during elevator init | Tejun Heo | 1 | -7/+12 |
| 2013-01-18 | init, block: try to load default elevator module early during boot | Tejun Heo | 1 | -0/+16 |
| 2013-01-11 | block,elevator: use new hashtable implementation | Sasha Levin | 1 | -19/+4 |
| 2012-11-09 | block: recursive merge requests | Shaohua Li | 1 | -4/+12 |
| 2012-09-20 | block: Clean up special command handling logic | Martin K. Petersen | 1 | -4/+2 |
| 2012-04-20 | blkcg: implement per-queue policy activation | Tejun Heo | 1 | -2/+0 |
| 2012-03-06 | block: implement bio_associate_current() | Tejun Heo | 1 | -2/+3 |
| 2012-03-06 | blkcg: unify blkg's for blkcg policies | Tejun Heo | 1 | -3/+2 |
| 2012-03-06 | blkcg: let blkcg core manage per-queue blkg list and counter | Tejun Heo | 1 | -2/+3 |
| 2012-03-06 | blkcg: shoot down blkio_groups on elevator switch | Tejun Heo | 1 | -0/+3 |
| 2012-03-06 | block: implement blk_queue_bypass_start/end() | Tejun Heo | 1 | -22/+3 |
| 2012-03-06 | elevator: make elevator_init_fn() return 0/-errno | Tejun Heo | 1 | -10/+2 |
| 2012-03-06 | elevator: clear auxiliary data earlier during elevator switch | Tejun Heo | 1 | -45/+45 |
| 2012-02-08 | block: separate out blk_rq_merge_ok() and blk_try_merge() from elevator funct... | Tejun Heo | 1 | -51/+4 |
| 2012-01-15 | Revert "block: recursive merge requests" | Jens Axboe | 1 | -12/+4 |
| 2011-12-16 | block: recursive merge requests | Shaohua Li | 1 | -4/+12 |