Defined in 1 files as a function:
Referenced in 9 files:
- fs/btrfs/compression.c
- fs/btrfs/defrag.c
- fs/btrfs/extent_io.c
- fs/btrfs/extent_map.c
- fs/btrfs/file.c
- fs/btrfs/inode.c
- fs/btrfs/tests/extent-map-tests.c
- fs/btrfs/tests/inode-tests.c
- fs/btrfs/tree-log.c, line 5164
Smatch caller information:
fs/btrfs/tree-log.c log_one_extent() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | $2 |
fs/btrfs/file.c btrfs_fallocate() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 0-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| HALF_LOCKED2 | &pool->lock |
fs/btrfs/file.c btrfs_fallocate() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| HALF_LOCKED2 | &pool->lock |
fs/btrfs/file.c btrfs_zero_range() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-9223372036854775807 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| BIT_INFO | 0 | em->flags | 0x10,0xffffffff |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | &pool->lock |
fs/btrfs/file.c find_first_non_hole() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| RX_PATH | |||
| TASK_NOT_RUNNING |
fs/btrfs/inode.c btrfs_cont_expand() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 0-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/inode.c btrfs_encoded_read() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| CAPABLE | 0 | 21 | |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| LOCK2 | &inode->vfs_inode.i_rwsem | ||
| TYPE_LOCK | (struct inode)->i_rwsem |
fs/btrfs/inode.c btrfs_find_new_delalloc_bytes() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/extent_io.c btrfs_do_readpage() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r get_extent_map |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/extent_io.c btrfs_readahead_expand() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | $1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| HALF_LOCKED2 | &mapping->invalidate_lock |
fs/btrfs/extent_io.c get_extent_map() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
fs/btrfs/extent_io.c submit_one_sector() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_get_extent |
| RX_PATH | |||
| TASK_NOT_RUNNING |
fs/btrfs/extent_io.c try_release_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | r btrfs_lookup_extent_mapping |
| BIT_INFO | 0 | em->flags | 0x0,0xfffffffe |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| LOCK2 | &extent_tree->lock | ||
| HALF_LOCKED2 | &folio->private->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_io.c try_release_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_lookup_extent_mapping |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &extent_tree->lock | ||
| HALF_LOCKED2 | &folio->private->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/defrag.c defrag_check_next_extent() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->len | 0-4294967294 |
| CAPPED_DATA | 0 | em->len | 1 |
| DATA_SOURCE | 0 | em | $1 |
| BIT_INFO | 0 | em->flags | 0x0,0xffffffef |
| USER_DATA | 0 | em->len | 1-s32max[c] |
| USER_DATA | 0 | em->start | 0-s32max[c] |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &inode->vfs_inode.i_rwsem | ||
| TYPE_LOCK | (struct inode)->i_rwsem |
fs/btrfs/defrag.c defrag_collect_targets() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r defrag_lookup_extent |
| BIT_INFO | 0 | em->flags | 0x0,0xffffffef |
| NOSPEC | 0 | em->len | |
| NOSPEC | 0 | em->start | |
| USER_DATA | 0 | em->len | 1-9223372036854775807[c] |
| USER_DATA | 0 | em->start | 0-s32max[c] |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &inode->vfs_inode.i_rwsem | ||
| TYPE_LOCK | (struct inode)->i_rwsem |
fs/btrfs/defrag.c defrag_collect_targets() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r defrag_lookup_extent |
| NOSPEC | 0 | em->len | |
| NOSPEC | 0 | em->start | |
| USER_DATA | 0 | em->len | 1-9223372036854775807[c] |
| USER_DATA | 0 | em->start | 0-s32max[c] |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &inode->vfs_inode.i_rwsem | ||
| TYPE_LOCK | (struct inode)->i_rwsem |
fs/btrfs/extent_map.c btrfs_add_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-143360 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | r btrfs_search_extent_mapping |
| LOCK2 | &em_tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c btrfs_add_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| DATA_SOURCE | 0 | em | r btrfs_search_extent_mapping |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &em_tree->lock | ||
| LOCK2 | rcu_read | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c btrfs_drop_extent_map_range() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &em_tree->lock | ||
| HALF_LOCKED2 | &fs_info->cleaner_mutex | ||
| HALF_LOCKED2 | &inode->i_mmap_lock | ||
| HALF_LOCKED2 | &leaf->lock | ||
| HALF_LOCKED2 | &pool->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c lookup_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | &inode->vfs_inode.i_rwsem | ||
| HALF_LOCKED2 | &tree->lock |
fs/btrfs/extent_map.c merge_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-143360 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | $2 |
| LOCK2 | &em_tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c merge_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-143360 |
| CAPPED_DATA | 0 | em->start | 1 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &em_tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c merge_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-143360 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | $2 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &em_tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c merge_extent_mapping() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-143360 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | $2 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| LOCK2 | &em_tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c mergeable_maps() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| BUF_SIZE | 0 | em | (-1),1-s32max |
| BUF_SIZE | 0 | em | (-1),1-s32max |
| DATA_SOURCE | 0 | em | $0 |
| NOSPEC | 0 | em->len | |
| NOSPEC | 0 | em->ram_bytes | |
| NOSPEC | 0 | em->start | |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| USER_DATA | 0 | em->len | 0-u64max[c] |
| USER_DATA | 0 | em->offset | 0 |
| USER_DATA | 0 | em->ram_bytes | 0-u64max[c] |
| USER_DATA | 0 | em->start | 0-18446744073709551614[c] |
| NO_OVERFLOW_SIMPLE | 0 | em->disk_num_bytes | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| HALF_LOCKED2 | &tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c tree_insert() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| HALF_LOCKED2 | &em_tree->lock | ||
| HALF_LOCKED2 | &tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c tree_insert() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 0,4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &em_tree->lock | ||
| HALF_LOCKED2 | &tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c tree_insert() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 0,4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &em_tree->lock | ||
| HALF_LOCKED2 | &tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c tree_insert() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &em_tree->lock | ||
| HALF_LOCKED2 | &tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c tree_insert() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &em_tree->lock | ||
| HALF_LOCKED2 | &tree->lock | ||
| TYPE_LOCK | (struct extent_map_tree)->lock |
fs/btrfs/extent_map.c tree_search() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| CAPPED_DATA | 0 | em->start | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &tree->lock |
fs/btrfs/extent_map.c tree_search() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 0,4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &tree->lock |
fs/btrfs/extent_map.c tree_search() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 0,4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start | |
| UNITS | 0 | em | unit_byte |
| HALF_LOCKED2 | &tree->lock |
fs/btrfs/compression.c add_ra_bio_folios() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | r btrfs_lookup_extent_mapping |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/compression.c add_ra_bio_folios() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-18446744073709551614 |
| CAPPED_DATA | 0 | em->start | 1 |
| DATA_SOURCE | 0 | em | r btrfs_lookup_extent_mapping |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/tests/extent-map-tests.c __test_case_3() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-12288 |
| CAPPED_DATA | 0 | em->start | 1 |
| FUZZY_MAX | 0 | em->start | 12288 |
| HARD_MAX | 0 | em->start | 12288 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/tests/extent-map-tests.c __test_case_4() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0-4096 |
| CAPPED_DATA | 0 | em->start | 1 |
| FUZZY_MAX | 0 | em->start | 4096 |
| HARD_MAX | 0 | em->start | 4096 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/tests/extent-map-tests.c test_case_1() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |
fs/btrfs/tests/extent-map-tests.c test_case_2() -> btrfs_extent_map_end()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | em | 4096-ptr_max |
| PARAM_VALUE | 0 | em->start | 0 |
| NO_OVERFLOW_SIMPLE | 0 | em->len | |
| NO_OVERFLOW_SIMPLE | 0 | em->start |