Documented in 1 files:
Defined in 2 files as a function:
- include/linux/refcount.h, line 425 (as a function)
- tools/include/linux/refcount.h, line 126 (as a function)
Referenced in 21 files:
- drivers/block/ublk_drv.c, line 1216
- drivers/iommu/iommufd/device.c, line 916
- drivers/misc/lkdtm/refcount.c
- fs/netfs/internal.h, line 283
- fs/nfsd/filecache.c, line 668
- include/linux/atmdev.h, line 191
- include/linux/sched/task.h, line 167
- include/net/inet_frag.h, line 138
- kernel/padata.c, line 57
- lib/objpool.c, line 200
- mm/memcontrol.c, line 4021
- mm/mmap_lock.c, line 71
- mm/page_owner.c, line 257
- net/core/pktgen.c
- net/core/sock.c
- net/ipv4/tcp_offload.c, line 249
- net/ipv4/tcp_output.c, line 1398
- net/ipv4/udp_offload.c, line 628
- net/sctp/socket.c, line 9222
- net/tls/tls_device_fallback.c, line 203
- tools/include/linux/refcount.h, line 153
Smatch caller information:
fs/netfs/write_collect.c netfs_put_group_many() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 1-853,855-u64max |
| DATA_SOURCE | 0 | i | $1 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
mm/memcontrol.c mem_cgroup_private_id_put() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| UNITS | 0 | i | unit_page |
| HALF_LOCKED2 | global &cgroup_mutex | ||
| HALF_LOCKED2 | rcu_read |
fs/nfsd/filecache.c nfsd_file_cond_queue() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1-2 |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PARAM_VALUE | 1 | r->refs.counter | (-1073741824),0-s32max |
| FUZZY_MAX | 0 | i | 2 |
| HARD_MAX | 0 | i | 2 |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | global &nfsd_mutex | ||
| HALF_LOCKED2 | rcu_read |
net/tls/tls_device_fallback.c complete_skb() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING |
net/core/pktgen.c pktgen_xmit() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | <- disables preempt | ||
| LOCK2 | bh |
net/core/pktgen.c pktgen_xmit() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | s32min-(-1),1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | <- disables preempt | ||
| LOCK2 | bh | ||
| HALF_LOCKED2 | &txq->_xmit_lock |
net/ipv4/tcp_offload.c tcp_gso_segment() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
drivers/iommu/iommufd/device.c iommufd_device_do_replace() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| LOCK2 | &igroup->lock | ||
| HALF_LOCKED2 | &ioas->mutex | ||
| HALF_LOCKED2 | &vdev->dev_set->lock | ||
| TYPE_LOCK | (struct iommufd_group)->lock |
net/ipv4/udp_offload.c __udp_gso_segment() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
net/sctp/socket.c sctp_wfree() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 256 |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| UNITS | 0 | i | unit_byte |
| HALF_LOCKED2 | &commonring->lock | ||
| HALF_LOCKED2 | &dlc->lock | ||
| HALF_LOCKED2 | &fq->q.lock | ||
| HALF_LOCKED2 | &priv->driver_lock | ||
| HALF_LOCKED2 | &qp->q.lock | ||
| HALF_LOCKED2 | &sk->sk_lock.slock | ||
| HALF_LOCKED2 | bh | ||
| HALF_LOCKED2 | flags | ||
| HALF_LOCKED2 | global &rfcomm_dev_lock | ||
| HALF_LOCKED2 | global &rfcomm_ioctl_mutex | ||
| HALF_LOCKED2 | global &rfcomm_mutex | ||
| HALF_LOCKED2 | rcu_read |
io_uring/io_uring.c put_task_struct_many() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | s32min-(-1),1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | &sqd->lock |
net/ieee802154/6lowpan/reassembly.c inet_frag_putn() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | s32min-(-1),1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
lib/objpool.c objpool_fini() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| FUZZY_MAX | 0 | i | 1 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
net/ipv6/reassembly.c inet_frag_putn() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | s32min-(-1),1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
drivers/block/ublk_drv.c ublk_sub_req_ref() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | &ctx->uring_lock | ||
| HALF_LOCKED2 | &io->lock |
net/core/sock.c __sock_wfree() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HOST_DATA | 0 | i | s32min-s32max |
| NO_OVERFLOW_SIMPLE | 0 | i | |
| UNITS | 0 | i | unit_byte |
| HALF_LOCKED2 | &commonring->lock | ||
| HALF_LOCKED2 | &dlc->lock | ||
| HALF_LOCKED2 | &fq->q.lock | ||
| HALF_LOCKED2 | &priv->driver_lock | ||
| HALF_LOCKED2 | &qp->q.lock | ||
| HALF_LOCKED2 | &sk->sk_lock.slock | ||
| HALF_LOCKED2 | bh | ||
| HALF_LOCKED2 | flags | ||
| HALF_LOCKED2 | global &rfcomm_dev_lock | ||
| HALF_LOCKED2 | global &rfcomm_ioctl_mutex | ||
| HALF_LOCKED2 | global &rfcomm_mutex | ||
| HALF_LOCKED2 | rcu_read |
net/core/sock.c sock_wfree() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| UNITS | 0 | i | unit_byte |
| HALF_LOCKED2 | &commonring->lock | ||
| HALF_LOCKED2 | &dlc->lock | ||
| HALF_LOCKED2 | &fq->q.lock | ||
| HALF_LOCKED2 | &priv->driver_lock | ||
| HALF_LOCKED2 | &qp->q.lock | ||
| HALF_LOCKED2 | &sk->sk_lock.slock | ||
| HALF_LOCKED2 | bh | ||
| HALF_LOCKED2 | flags | ||
| HALF_LOCKED2 | global &rfcomm_dev_lock | ||
| HALF_LOCKED2 | global &rfcomm_ioctl_mutex | ||
| HALF_LOCKED2 | global &rfcomm_mutex | ||
| HALF_LOCKED2 | rcu_read |
net/core/sock.c sock_wfree() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HOST_DATA | 0 | i | s32min-s32max |
| NO_OVERFLOW_SIMPLE | 0 | i | |
| UNITS | 0 | i | unit_byte |
| HALF_LOCKED2 | &commonring->lock | ||
| HALF_LOCKED2 | &dlc->lock | ||
| HALF_LOCKED2 | &fq->q.lock | ||
| HALF_LOCKED2 | &priv->driver_lock | ||
| HALF_LOCKED2 | &qp->q.lock | ||
| HALF_LOCKED2 | &sk->sk_lock.slock | ||
| HALF_LOCKED2 | bh | ||
| HALF_LOCKED2 | flags | ||
| HALF_LOCKED2 | global &rfcomm_dev_lock | ||
| HALF_LOCKED2 | global &rfcomm_ioctl_mutex | ||
| HALF_LOCKED2 | global &rfcomm_mutex | ||
| HALF_LOCKED2 | rcu_read |
net/ipv4/inet_fragment.c inet_frag_putn() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1-2 |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| FUZZY_MAX | 0 | i | 1 |
| HARD_MAX | 0 | i | 2 |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | rcu_read |
kernel/padata.c padata_put_pd_cnt() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 0-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| FUZZY_MAX | 0 | i | 0 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
fs/netfs/write_issue.c netfs_put_group_many() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 1-853,855-u64max |
| DATA_SOURCE | 0 | i | $1 |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | &inode->i_rwsem |
net/ipv4/ip_fragment.c inet_frag_putn() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | s32min-(-1),1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| RX_PATH | |||
| TASK_NOT_RUNNING |
net/ipv6/netfilter/nf_conntrack_reasm.c inet_frag_putn() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | s32min-(-1),1-s32max |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| DATA_SOURCE | 0 | i | $1 |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING |
net/atm/raw.c atm_return_tx() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| UNITS | 0 | i | unit_byte |
| HALF_LOCKED2 | sk |
mm/mmap_lock.c __vma_end_exclude_readers() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 1073741824 |
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| HALF_LOCKED2 | &mm->mmap_lock |
drivers/misc/lkdtm/refcount.c lkdtm_REFCOUNT_SUB_AND_TEST_NEGATIVE() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 5 |
| PARAM_VALUE | 1 | r | 2008436648477364224 |
| PARAM_VALUE | 1 | r->refs.counter | 3 |
drivers/misc/lkdtm/refcount.c lkdtm_REFCOUNT_SUB_AND_TEST_SATURATED() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 8 |
| PARAM_VALUE | 1 | r | 1527500843225194496 |
| PARAM_VALUE | 1 | r->refs.counter | (-1073741824) |
drivers/misc/lkdtm/refcount.c lkdtm_REFCOUNT_SUB_AND_TEST_ZERO() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 0 | i | 0 |
| PARAM_VALUE | 1 | r | 4179809451711762432 |
| PARAM_VALUE | 1 | r->refs.counter | 0 |
mm/page_owner.c dec_stack_record_count() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| CAPPED_DATA | 0 | i | 1 |
| DATA_SOURCE | 0 | i | $1 |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING |
net/atm/common.c atm_return_tx() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| RX_PATH | |||
| UNITS | 0 | i | unit_byte |
| LOCK2 | sk | ||
| HALF_LOCKED2 | &vq->mutex |
net/ipv4/tcp_output.c tcp_wfree() -> refcount_sub_and_test()
| Type | Parameter | Key | Value |
|---|---|---|---|
| PARAM_VALUE | 1 | r | 4096-ptr_max |
| PREEMPT_ADD | |||
| RX_PATH | |||
| TASK_NOT_RUNNING | |||
| UNITS | 0 | i | unit_byte |
| HALF_LOCKED2 | &commonring->lock | ||
| HALF_LOCKED2 | &dlc->lock | ||
| HALF_LOCKED2 | &fq->q.lock | ||
| HALF_LOCKED2 | &priv->driver_lock | ||
| HALF_LOCKED2 | &qp->q.lock | ||
| HALF_LOCKED2 | &sk->sk_lock.slock | ||
| HALF_LOCKED2 | bh | ||
| HALF_LOCKED2 | flags | ||
| HALF_LOCKED2 | global &rfcomm_dev_lock | ||
| HALF_LOCKED2 | global &rfcomm_ioctl_mutex | ||
| HALF_LOCKED2 | global &rfcomm_mutex | ||
| HALF_LOCKED2 | rcu_read |