linux/fs/btrfs/rcu-string.h
<<
>>
Prefs
   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
   9struct rcu_string {
  10        struct rcu_head rcu;
  11        char str[0];
  12};
  13
  14static 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
  25static 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
  49