Defined in 1 files as a prototype:

Defined in 1 files as a function:

Referenced in 4 files:

Smatch caller information:

fs/smb/smbdirect/connect.c smbdirect_connect_negotiate_start() -> smbdirect_connection_destroy_mem_pools()

Type Parameter Key Value
PARAM_VALUE 0 sc 4096-ptr_max
PARAM_VALUE 0 sc->first_error 0
PARAM_VALUE 0 sc->ib.dev 4096-ptr_max
PARAM_VALUE 0 sc->ib.dev->dma_device->dma_io_tlb_lock.rlock.dep_map->name 0-255
PARAM_VALUE 0 sc->ib.dev->dma_device->dma_io_tlb_pools.next 4096-ptr_max
PARAM_VALUE 0 sc->ib.dev->dma_device->dma_io_tlb_pools.next->prev 4096-ptr_max
PARAM_VALUE 0 sc->ib.dev->dma_device->dma_io_tlb_pools.next->prev->prev 4096-ptr_max
PARAM_VALUE 0 sc->ib.dev->dma_device->dma_uses_io_tlb 1
PARAM_VALUE 0 sc->ib.dev->dma_device->iommu->pci_32bit_workaround 0-1
PARAM_VALUE 0 sc->ib.dev->port_data 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd 4096-ptr_max
PARAM_VALUE 0 sc->idle.keepalive 0
PARAM_VALUE 0 sc->idle.timer_work.work.lockdep_map->name 0-255
PARAM_VALUE 0 sc->logging.needed 4096-ptr_max
PARAM_VALUE 0 sc->parameters.initiator_depth 0-255
PARAM_VALUE 0 sc->parameters.max_recv_size 0-4194248
PARAM_VALUE 0 sc->parameters.responder_resources 0-255
PARAM_VALUE 0 sc->rdma.cm_id 4096-ptr_max
PARAM_VALUE 0 sc->rdma.cm_id->event_handler 321922564787351552
PARAM_VALUE 0 sc->rdma.expected_event 10
PARAM_VALUE 0 sc->rdma.legacy_iwarp 1
PARAM_VALUE 0 sc->recv_io.expected 2
PARAM_VALUE 0 sc->recv_io.mem.cache 4096-ptr_max
PARAM_VALUE 0 sc->recv_io.mem.cache->align 0,8-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->allocflags 262144-262145,262148-262149,262160-262161,262164-262165
PARAM_VALUE 0 sc->recv_io.mem.cache->flags 0,8192-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj->name 0-255
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.kref.refcount.refs.counter 1
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.ktype->child_ns_type 0,2344685749105987584,4089303432171261952,6274457576243130368,8186263191508828160
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.ktype->get_ownership 0,754295003445952512,1770093955000758272,2031763320308453376,9073032014207823872,9089295143347961856
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.sd->attr.open->nr_mmapped 0-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.state_add_uevent_sent 0
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.state_initialized 1
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.state_remove_uevent_sent 0
PARAM_VALUE 0 sc->recv_io.mem.cache->list.prev 81474172537511936
PARAM_VALUE 0 sc->recv_io.mem.cache->min_partial 5
PARAM_VALUE 0 sc->recv_io.mem.cache->offset 0
PARAM_VALUE 0 sc->recv_io.mem.cache->red_left_pad 0
PARAM_VALUE 0 sc->recv_io.mem.cache->refcount 1-s32max
PARAM_VALUE 0 sc->recv_io.mem.cache->remote_node_defrag_ratio 1000
PARAM_VALUE 0 sc->recv_io.mem.cache->sheaf_capacity 0-536870907,4294967292-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->size 0
PARAM_VALUE 0 sc->recv_io.mem.pool 4096-ptr_max
PARAM_VALUE 0 sc->recv_io.mem.pool->min_nr 0-u16max
PARAM_VALUE 0 sc->recv_io.mem.pool->pool_data 4096-ptr_max
PARAM_VALUE 0 sc->send_io.bcredits.count.counter 1
PARAM_VALUE 0 sc->send_io.lcredits.count.counter 0-u16max
PARAM_VALUE 0 sc->send_io.mem.cache 4096-ptr_max
PARAM_VALUE 0 sc->send_io.mem.cache->align 0,8-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->allocflags 262144-262145,262148-262149,262160-262161,262164-262165
PARAM_VALUE 0 sc->send_io.mem.cache->flags 0,8192-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->kobj->name 0-255
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.kref.refcount.refs.counter 1
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.ktype->child_ns_type 0,2344685749105987584,4089303432171261952,6274457576243130368,8186263191508828160
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.ktype->get_ownership 0,754295003445952512,1770093955000758272,2031763320308453376,9073032014207823872,9089295143347961856
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.sd->attr.open->nr_mmapped 0-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_add_uevent_sent 0
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_initialized 1
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_remove_uevent_sent 0
PARAM_VALUE 0 sc->send_io.mem.cache->list.prev 81474172537511936
PARAM_VALUE 0 sc->send_io.mem.cache->min_partial 5
PARAM_VALUE 0 sc->send_io.mem.cache->offset 0
PARAM_VALUE 0 sc->send_io.mem.cache->red_left_pad 0
PARAM_VALUE 0 sc->send_io.mem.cache->refcount 1-s32max
PARAM_VALUE 0 sc->send_io.mem.cache->remote_node_defrag_ratio 1000
PARAM_VALUE 0 sc->send_io.mem.cache->sheaf_capacity 0-536870907,4294967292-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->size 0
PARAM_VALUE 0 sc->send_io.mem.pool 4096-ptr_max
PARAM_VALUE 0 sc->send_io.mem.pool->lock.rlock.dep_map->name 0-255
PARAM_VALUE 0 sc->send_io.mem.pool->min_nr 0-u16max
PARAM_VALUE 0 sc->send_io.mem.pool->pool_data 4096-ptr_max
PARAM_VALUE 0 sc->status 12
BUF_SIZE 0 sc s32min-(-2),1-s32max
BUF_SIZE 0 sc s32min-(-2),1-s32max
CAPPED_DATA 0 sc->parameters.recv_credit_max 1
DATA_SOURCE 0 sc $0
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
NO_OVERFLOW_SIMPLE 0 sc->recv_io.mem.pool->min_nr
NO_OVERFLOW_SIMPLE 0 sc->send_io.mem.pool->min_nr
HALF_LOCKED2 &id_priv->handler_mutex
HALF_LOCKED2 &listen_id->handler_mutex

fs/smb/smbdirect/socket.c smbdirect_socket_destroy() -> smbdirect_connection_destroy_mem_pools()

Type Parameter Key Value
PARAM_VALUE 0 sc 4096-ptr_max
PARAM_VALUE 0 sc->connect.work.lockdep_map->name 0-255
PARAM_VALUE 0 sc->disconnect_work.lockdep_map->name 0-255
PARAM_VALUE 0 sc->first_error s32min-(-1),1-s32max
PARAM_VALUE 0 sc->ib.pd 0
PARAM_VALUE 0 sc->ib.qp 0
PARAM_VALUE 0 sc->ib.recv_cq 0
PARAM_VALUE 0 sc->ib.send_cq 0
PARAM_VALUE 0 sc->idle.immediate_work.lockdep_map->name 0-255
PARAM_VALUE 0 sc->idle.timer_work.work.lockdep_map->name 0-255
PARAM_VALUE 0 sc->listen.lock.rlock.dep_map->name 0-255
PARAM_VALUE 0 sc->rdma.cm_id 0
PARAM_VALUE 0 sc->recv_io.posted.refill_work.lockdep_map->name 0-255
PARAM_VALUE 0 sc->recv_io.reassembly.data_length 0
PARAM_VALUE 0 sc->recv_io.reassembly.lock.rlock.dep_map->name 0-255
PARAM_VALUE 0 sc->status 17,19-u32max
CAPPED_DATA 0 &sc->connect.work 1
CAPPED_DATA 0 &sc->disconnect_work 1
CAPPED_DATA 0 &sc->idle.immediate_work 1
CAPPED_DATA 0 &sc->listen.pending 1
CAPPED_DATA 0 &sc->listen.ready 1
CAPPED_DATA 0 &sc->recv_io.posted.refill_work 1
CAPPED_DATA 0 &sc->recv_io.reassembly.list 1
DATA_SOURCE 0 sc $0
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 global &init_lock

fs/smb/smbdirect/connection.c smbdirect_connection_create_mem_pools() -> smbdirect_connection_destroy_mem_pools()

Type Parameter Key Value
PARAM_VALUE 0 sc 4096-ptr_max
PARAM_VALUE 0 sc->first_error 0
PARAM_VALUE 0 sc->ib.dev 4096-ptr_max
PARAM_VALUE 0 sc->ib.dev->port_data 4096-ptr_max
PARAM_VALUE 0 sc->parameters.initiator_depth 0-255
PARAM_VALUE 0 sc->parameters.responder_resources 0-255
PARAM_VALUE 0 sc->rdma.cm_id 4096-ptr_max
PARAM_VALUE 0 sc->rdma.expected_event 10,19
PARAM_VALUE 0 sc->rdma.legacy_iwarp 1
PARAM_VALUE 0 sc->send_io.mem.cache 0,4096-ptr_max
PARAM_VALUE 0 sc->send_io.mem.cache->align 0,8-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->allocflags 262144-262145,262148-262149,262160-262161,262164-262165
PARAM_VALUE 0 sc->send_io.mem.cache->flags 0,8192-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->kobj->name 0-255
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.kref.refcount.refs.counter 1
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.sd->attr.open->nr_mmapped 0-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_add_uevent_sent 0
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_initialized 1
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_remove_uevent_sent 0
PARAM_VALUE 0 sc->send_io.mem.cache->list.prev 81474172537511936
PARAM_VALUE 0 sc->send_io.mem.cache->min_partial 5-10
PARAM_VALUE 0 sc->send_io.mem.cache->offset 0
PARAM_VALUE 0 sc->send_io.mem.cache->refcount 1-s32max
PARAM_VALUE 0 sc->send_io.mem.cache->remote_node_defrag_ratio 1000
PARAM_VALUE 0 sc->send_io.mem.cache->sheaf_capacity 0-536870907,4294967292-4294967295
PARAM_VALUE 0 sc->status 0,12
BUF_SIZE 0 sc s32min-(-1),1-s32max
BUF_SIZE 0 sc s32min-(-1),1-s32max
BUF_SIZE 0 sc->accept.listener s32min-(-1),1-s32max
BUF_SIZE 0 sc->recv_io.mem.pool (-1),200
BUF_SIZE 0 sc->send_io.mem.pool (-1),200
DATA_SOURCE 0 sc $0
HARD_MAX 0 sc->rdma.expected_event 19
HARD_MAX 0 sc->status 12
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
NO_OVERFLOW_SIMPLE 0 sc->first_error
NO_OVERFLOW_SIMPLE 0 sc->ib.pd->device->hw_stats_attr_index
NO_OVERFLOW_SIMPLE 0 sc->ib.pd->device->num_comp_vectors
NO_OVERFLOW_SIMPLE 0 sc->ib.pd->device->phys_port_cnt
NO_OVERFLOW_SIMPLE 0 sc->recv_io.mem.pool->min_nr
NO_OVERFLOW_SIMPLE 0 sc->send_io.mem.pool->min_nr
HALF_LOCKED2 &id_priv->handler_mutex
HALF_LOCKED2 &listen_id->handler_mutex

fs/smb/smbdirect/accept.c smbdirect_accept_connect_request() -> smbdirect_connection_destroy_mem_pools()

Type Parameter Key Value
PARAM_VALUE 0 sc 4096-ptr_max
PARAM_VALUE 0 sc->accept.list.next 4096-ptr_max
PARAM_VALUE 0 sc->accept.listener 4096-ptr_max
PARAM_VALUE 0 sc->accept.listener->first_error 0
PARAM_VALUE 0 sc->accept.listener->listen.pending.prev 4096-ptr_max
PARAM_VALUE 0 sc->accept.listener->parameters.flags 1-2
PARAM_VALUE 0 sc->accept.listener->parameters.initiator_depth 0-255
PARAM_VALUE 0 sc->accept.listener->parameters.responder_resources 0-255
PARAM_VALUE 0 sc->first_error 0
PARAM_VALUE 0 sc->ib.dev 4096-ptr_max
PARAM_VALUE 0 sc->ib.dev->attrs.max_cqe 1-u32max
PARAM_VALUE 0 sc->ib.dev->attrs.max_qp_wr 1-u32max
PARAM_VALUE 0 sc->ib.dev->attrs.max_recv_sge 1-u32max
PARAM_VALUE 0 sc->ib.dev->attrs.max_send_sge 6-u32max
PARAM_VALUE 0 sc->ib.dev->ops.size_ib_cq 0-4000000
PARAM_VALUE 0 sc->ib.dev->ops.size_ib_pd 0-4000000
PARAM_VALUE 0 sc->ib.dev->port_data 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->device 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->device->ops.create_qp 1-u64max
PARAM_VALUE 0 sc->ib.pd->device->ops.size_ib_pd 0-4000000
PARAM_VALUE 0 sc->ib.pd->device->port_data 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->flags 0
PARAM_VALUE 0 sc->ib.pd->res.comp.done 0
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.lock.magic 3735899821
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.lock.owner (-1)
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.lock.owner_cpu u32max
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.task_list.next 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.task_list.next->next 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.task_list.prev 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.task_list.prev->next 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->res.comp.wait.task_list.prev->prev 4096-ptr_max
PARAM_VALUE 0 sc->ib.pd->res.kern_name 8039347792360431616
PARAM_VALUE 0 sc->ib.pd->res.kref.refcount.refs.counter 1
PARAM_VALUE 0 sc->ib.pd->res.type 0
PARAM_VALUE 0 sc->ib.poll_ctx 0-3
PARAM_VALUE 0 sc->ib.qp 4096-ptr_max
PARAM_VALUE 0 sc->ib.recv_cq 4096-ptr_max
PARAM_VALUE 0 sc->ib.send_cq 4096-ptr_max
PARAM_VALUE 0 sc->listen.backlog (-1)
PARAM_VALUE 0 sc->parameters.flags 1-2
PARAM_VALUE 0 sc->parameters.initiator_depth 0-255
PARAM_VALUE 0 sc->parameters.max_recv_size 0-4194248
PARAM_VALUE 0 sc->parameters.responder_resources 0-255
PARAM_VALUE 0 sc->rdma.cm_id 4096-ptr_max
PARAM_VALUE 0 sc->rdma.cm_id->event_handler 5415160583070007296
PARAM_VALUE 0 sc->rdma.cm_id->port_num 0
PARAM_VALUE 0 sc->rdma.cm_id->qp 4096-ptr_max
PARAM_VALUE 0 sc->rdma.expected_event 9,19
PARAM_VALUE 0 sc->rdma.legacy_iwarp 1
PARAM_VALUE 0 sc->recv_io.credits.target 1
PARAM_VALUE 0 sc->recv_io.expected 1
PARAM_VALUE 0 sc->recv_io.mem.cache 4096-ptr_max
PARAM_VALUE 0 sc->recv_io.mem.cache->align 0,8-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->allocflags 262144-262145,262148-262149,262160-262161,262164-262165
PARAM_VALUE 0 sc->recv_io.mem.cache->flags 0,8192-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj->name 0-255
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.kref.refcount.refs.counter 1
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.ktype->child_ns_type 0,2344685749105987584,4089303432171261952,6274457576243130368,8186263191508828160
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.ktype->get_ownership 0,754295003445952512,1770093955000758272,2031763320308453376,9073032014207823872,9089295143347961856
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.sd->attr.open->nr_mmapped 0-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.state_add_uevent_sent 0
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.state_initialized 1
PARAM_VALUE 0 sc->recv_io.mem.cache->kobj.state_remove_uevent_sent 0
PARAM_VALUE 0 sc->recv_io.mem.cache->list.prev 81474172537511936
PARAM_VALUE 0 sc->recv_io.mem.cache->min_partial 5
PARAM_VALUE 0 sc->recv_io.mem.cache->offset 0
PARAM_VALUE 0 sc->recv_io.mem.cache->red_left_pad 0
PARAM_VALUE 0 sc->recv_io.mem.cache->refcount 1-s32max
PARAM_VALUE 0 sc->recv_io.mem.cache->remote_node_defrag_ratio 1000
PARAM_VALUE 0 sc->recv_io.mem.cache->sheaf_capacity 0-536870907,4294967292-4294967295
PARAM_VALUE 0 sc->recv_io.mem.cache->size 0
PARAM_VALUE 0 sc->recv_io.mem.pool 4096-ptr_max
PARAM_VALUE 0 sc->recv_io.mem.pool->min_nr 0-u16max
PARAM_VALUE 0 sc->recv_io.mem.pool->pool_data 4096-ptr_max
PARAM_VALUE 0 sc->refs.destroy.refcount.refs.counter 1
PARAM_VALUE 0 sc->refs.disconnect.refcount.refs.counter 1
PARAM_VALUE 0 sc->rw_io.credits.max 1-4294967296
PARAM_VALUE 0 sc->rw_io.credits.num_pages 0-4296015870
PARAM_VALUE 0 sc->send_io.bcredits.count.counter 1
PARAM_VALUE 0 sc->send_io.lcredits.count.counter 0-u16max
PARAM_VALUE 0 sc->send_io.mem.cache 4096-ptr_max
PARAM_VALUE 0 sc->send_io.mem.cache->align 0,8-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->allocflags 262144-262145,262148-262149,262160-262161,262164-262165
PARAM_VALUE 0 sc->send_io.mem.cache->flags 0,8192-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->kobj->name 0-255
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.kref.refcount.refs.counter 1
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.ktype->child_ns_type 0,2344685749105987584,4089303432171261952,6274457576243130368,8186263191508828160
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.ktype->get_ownership 0,754295003445952512,1770093955000758272,2031763320308453376,9073032014207823872,9089295143347961856
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.sd->attr.open->nr_mmapped 0-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_add_uevent_sent 0
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_initialized 1
PARAM_VALUE 0 sc->send_io.mem.cache->kobj.state_remove_uevent_sent 0
PARAM_VALUE 0 sc->send_io.mem.cache->list.prev 81474172537511936
PARAM_VALUE 0 sc->send_io.mem.cache->min_partial 5
PARAM_VALUE 0 sc->send_io.mem.cache->offset 0
PARAM_VALUE 0 sc->send_io.mem.cache->red_left_pad 0
PARAM_VALUE 0 sc->send_io.mem.cache->refcount 1-s32max
PARAM_VALUE 0 sc->send_io.mem.cache->remote_node_defrag_ratio 1000
PARAM_VALUE 0 sc->send_io.mem.cache->sheaf_capacity 0-536870907,4294967292-4294967295
PARAM_VALUE 0 sc->send_io.mem.cache->size 0
PARAM_VALUE 0 sc->send_io.mem.pool 4096-ptr_max
PARAM_VALUE 0 sc->send_io.mem.pool->min_nr 0-u16max
PARAM_VALUE 0 sc->send_io.mem.pool->pool_data 4096-ptr_max
PARAM_VALUE 0 sc->status 0,9
BUF_SIZE 0 sc->accept.listener s32min-(-2),1-s32max
CAPPED_DATA 0 sc->accept.listener->rdma.expected_event 1
CAPPED_DATA 0 sc->ib.dev->attrs.max_cqe 1
CAPPED_DATA 0 sc->ib.dev->attrs.max_qp_wr 1
CAPPED_DATA 0 sc->parameters.recv_credit_max 1
CAPPED_DATA 0 sc->rdma.cm_id->device 1
DATA_SOURCE 0 sc $0
FUZZY_MAX 0 sc->rdma.expected_event 9
FUZZY_MAX 0 sc->status 9
PARAM_COMPARE 0 sc->ib.dev->attrs.max_cqe > $0->ib.dev->attrs.max_qp_wr
BIT_INFO 0 sc->rdma.expected_event 0x1,0x1b
BIT_INFO 0 sc->status 0x0,0x9
TERMINATED 0 sc->ib.pd->res.kern_name 1
HARD_MAX 0 sc->rdma.expected_event 19
HARD_MAX 0 sc->status 9
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
NO_OVERFLOW_SIMPLE 0 sc->ib.pd->device->hw_stats_attr_index
NO_OVERFLOW_SIMPLE 0 sc->ib.pd->device->num_comp_vectors
NO_OVERFLOW_SIMPLE 0 sc->ib.pd->device->phys_port_cnt
NO_OVERFLOW_SIMPLE 0 sc->recv_io.mem.pool->min_nr
NO_OVERFLOW_SIMPLE 0 sc->send_io.mem.pool->min_nr
HALF_LOCKED2 &id_priv->handler_mutex
HALF_LOCKED2 &listen_id->handler_mutex