LCOV - code coverage report
Current view: top level - fs/btrfs - rcu-string.h (source / functions) Hit Total Coverage
Test: btrfstest.info Lines: 8 8 100.0 %
Date: 2014-11-28 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (C) 2012 Red Hat.  All rights reserved.
       3             :  *
       4             :  * This program is free software; you can redistribute it and/or
       5             :  * modify it under the terms of the GNU General Public
       6             :  * License v2 as published by the Free Software Foundation.
       7             :  *
       8             :  * This program is distributed in the hope that it will be useful,
       9             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      10             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      11             :  * General Public License for more details.
      12             :  *
      13             :  * You should have received a copy of the GNU General Public
      14             :  * License along with this program; if not, write to the
      15             :  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      16             :  * Boston, MA 021110-1307, USA.
      17             :  */
      18             : 
      19             : struct rcu_string {
      20             :         struct rcu_head rcu;
      21             :         char str[0];
      22             : };
      23             : 
      24         382 : static inline struct rcu_string *rcu_string_strdup(const char *src, gfp_t mask)
      25             : {
      26         382 :         size_t len = strlen(src) + 1;
      27         382 :         struct rcu_string *ret = kzalloc(sizeof(struct rcu_string) +
      28             :                                          (len * sizeof(char)), mask);
      29         382 :         if (!ret)
      30             :                 return ret;
      31         382 :         strncpy(ret->str, src, len);
      32         382 :         return ret;
      33             : }
      34             : 
      35             : static inline void rcu_string_free(struct rcu_string *str)
      36             : {
      37         256 :         if (str)
      38         256 :                 kfree_rcu(str, rcu);
      39             : }
      40             : 
      41             : #define printk_in_rcu(fmt, ...) do {    \
      42             :         rcu_read_lock();                \
      43             :         printk(fmt, __VA_ARGS__);       \
      44             :         rcu_read_unlock();              \
      45             : } while (0)
      46             : 
      47             : #define printk_ratelimited_in_rcu(fmt, ...) do {        \
      48             :         rcu_read_lock();                                \
      49             :         printk_ratelimited(fmt, __VA_ARGS__);           \
      50             :         rcu_read_unlock();                              \
      51             : } while (0)
      52             : 
      53             : #define rcu_str_deref(rcu_str) ({                               \
      54             :         struct rcu_string *__str = rcu_dereference(rcu_str);    \
      55             :         __str->str;                                          \
      56             : })

Generated by: LCOV version 1.10