root/fs/btrfs/rcu-string.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. rcu_string_strdup
  2. rcu_string_free

   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[0];
  12 };
  13 
  14 static inline struct rcu_string *rcu_string_strdup(const char *src, gfp_t mask)
  15 {
  16         size_t len = strlen(src) + 1;
  17         struct rcu_string *ret = kzalloc(sizeof(struct rcu_string) +
  18                                          (len * sizeof(char)), mask);
  19         if (!ret)
  20                 return ret;
  21         strncpy(ret->str, src, len);
  22         return ret;
  23 }
  24 
  25 static inline void rcu_string_free(struct rcu_string *str)
  26 {
  27         if (str)
  28                 kfree_rcu(str, rcu);
  29 }
  30 
  31 #define printk_in_rcu(fmt, ...) do {    \
  32         rcu_read_lock();                \
  33         printk(fmt, __VA_ARGS__);       \
  34         rcu_read_unlock();              \
  35 } while (0)
  36 
  37 #define printk_ratelimited_in_rcu(fmt, ...) do {        \
  38         rcu_read_lock();                                \
  39         printk_ratelimited(fmt, __VA_ARGS__);           \
  40         rcu_read_unlock();                              \
  41 } while (0)
  42 
  43 #define rcu_str_deref(rcu_str) ({                               \
  44         struct rcu_string *__str = rcu_dereference(rcu_str);    \
  45         __str->str;                                             \
  46 })
  47 
  48 #endif

/* [<][>][^][v][top][bottom][index][help] */