Documented in 1 files:

Defined in 2 files as a function:

Referenced in 21 files:

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