LCOV - code coverage report
Current view: top level - io_uring - refs.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 16 0.0 %
Date: 2023-08-24 13:40:31 Functions: 0 3 0.0 %

          Line data    Source code
       1             : #ifndef IOU_REQ_REF_H
       2             : #define IOU_REQ_REF_H
       3             : 
       4             : #include <linux/atomic.h>
       5             : #include <linux/io_uring_types.h>
       6             : 
       7             : /*
       8             :  * Shamelessly stolen from the mm implementation of page reference checking,
       9             :  * see commit f958d7b528b1 for details.
      10             :  */
      11             : #define req_ref_zero_or_close_to_overflow(req)  \
      12             :         ((unsigned int) atomic_read(&(req->refs)) + 127u <= 127u)
      13             : 
      14           0 : static inline bool req_ref_inc_not_zero(struct io_kiocb *req)
      15             : {
      16           0 :         WARN_ON_ONCE(!(req->flags & REQ_F_REFCOUNT));
      17           0 :         return atomic_inc_not_zero(&req->refs);
      18             : }
      19             : 
      20           0 : static inline bool req_ref_put_and_test(struct io_kiocb *req)
      21             : {
      22           0 :         if (likely(!(req->flags & REQ_F_REFCOUNT)))
      23             :                 return true;
      24             : 
      25           0 :         WARN_ON_ONCE(req_ref_zero_or_close_to_overflow(req));
      26           0 :         return atomic_dec_and_test(&req->refs);
      27             : }
      28             : 
      29           0 : static inline void req_ref_get(struct io_kiocb *req)
      30             : {
      31           0 :         WARN_ON_ONCE(!(req->flags & REQ_F_REFCOUNT));
      32           0 :         WARN_ON_ONCE(req_ref_zero_or_close_to_overflow(req));
      33           0 :         atomic_inc(&req->refs);
      34           0 : }
      35             : 
      36             : static inline void __io_req_set_refcount(struct io_kiocb *req, int nr)
      37             : {
      38           0 :         if (!(req->flags & REQ_F_REFCOUNT)) {
      39           0 :                 req->flags |= REQ_F_REFCOUNT;
      40           0 :                 atomic_set(&req->refs, nr);
      41             :         }
      42             : }
      43             : 
      44             : static inline void io_req_set_refcount(struct io_kiocb *req)
      45             : {
      46           0 :         __io_req_set_refcount(req, 1);
      47             : }
      48             : #endif

Generated by: LCOV version 1.14