LCOV - code coverage report
Current view: top level - fs/btrfs - rcu-string.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-achx @ Mon Jul 31 20:08:12 PDT 2023 Lines: 7 9 77.8 %
Date: 2023-07-31 20:08:12 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Copyright (C) 2012 Red Hat.  All rights reserved.
       4             :  */
       5             : 
       6             : #ifndef BTRFS_RCU_STRING_H
       7             : #define BTRFS_RCU_STRING_H
       8             : 
       9             : struct rcu_string {
      10             :         struct rcu_head rcu;
      11             :         char str[];
      12             : };
      13             : 
      14        4465 : static inline struct rcu_string *rcu_string_strdup(const char *src, gfp_t mask)
      15             : {
      16        4465 :         size_t len = strlen(src) + 1;
      17        4465 :         struct rcu_string *ret = kzalloc(sizeof(struct rcu_string) +
      18             :                                          (len * sizeof(char)), mask);
      19        4465 :         if (!ret)
      20             :                 return ret;
      21             :         /* Warn if the source got unexpectedly truncated. */
      22        8930 :         if (WARN_ON(strscpy(ret->str, src, len) < 0)) {
      23           0 :                 kfree(ret);
      24           0 :                 return NULL;
      25             :         }
      26             :         return ret;
      27             : }
      28             : 
      29             : static inline void rcu_string_free(struct rcu_string *str)
      30             : {
      31        4455 :         if (str)
      32        4455 :                 kfree_rcu(str, rcu);
      33             : }
      34             : 
      35             : #define printk_in_rcu(fmt, ...) do {    \
      36             :         rcu_read_lock();                \
      37             :         printk(fmt, __VA_ARGS__);       \
      38             :         rcu_read_unlock();              \
      39             : } while (0)
      40             : 
      41             : #define printk_ratelimited_in_rcu(fmt, ...) do {        \
      42             :         rcu_read_lock();                                \
      43             :         printk_ratelimited(fmt, __VA_ARGS__);           \
      44             :         rcu_read_unlock();                              \
      45             : } while (0)
      46             : 
      47             : #define rcu_str_deref(rcu_str) ({                               \
      48             :         struct rcu_string *__str = rcu_dereference(rcu_str);    \
      49             :         __str->str;                                          \
      50             : })
      51             : 
      52             : #endif

Generated by: LCOV version 1.14