The RCU-friendly string API used internally by BTRFS is generic enough for
common use. This doesn't add any new functionality, but instead just moves the
code and documents the existing API.
Reviewed-by: Josh Triplett
Acked-by: Paul E. McKenney
Signed-off-by: Omar Sandoval
---
Chris, could you take a look at this again? It's just been rebased and should
be good to go. Thanks!
v5: Rebase against v3.18-rc3
v4: Don't return anything from the printk wrappers on the assumption that
printk will return void someday
v3: Add __rcu annotation to relevant functions, add Paul's ack and Josh's
review
fs/btrfs/check-integrity.c | 6 ++--
fs/btrfs/dev-replace.c | 19 +-
fs/btrfs/disk-io.c | 6 ++--
fs/btrfs/extent_io.c | 4 +--
fs/btrfs/ioctl.c | 4 +--
fs/btrfs/raid56.c | 2 +-
fs/btrfs/rcu-string.h | 56 -
fs/btrfs/scrub.c | 15
fs/btrfs/super.c | 2 +-
fs/btrfs/volumes.c | 14
include/linux/rcustring.h | 89 ++
11 files changed, 126 insertions(+), 91 deletions(-)
delete mode 100644 fs/btrfs/rcu-string.h
create mode 100644 include/linux/rcustring.h
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
index cb7f3fe..a894c94 100644
--- a/fs/btrfs/check-integrity.c
+++ b/fs/btrfs/check-integrity.c
@@ -94,6 +94,7 @@
#include
#include
#include
+#include
#include "ctree.h"
#include "disk-io.h"
#include "hash.h"
@@ -103,7 +104,6 @@
#include "print-tree.h"
#include "locking.h"
#include "check-integrity.h"
-#include "rcu-string.h"
#define BTRFSIC_BLOCK_HASHTABLE_SIZE 0x1
#define BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE 0x1
@@ -850,8 +850,8 @@ static int btrfsic_process_superblock_dev_mirror(
printk_in_rcu(KERN_INFO "New initial S-block (bdev %p,
%s)"
" @%llu (%s/%llu/%d)\n",
superblock_bdev,
-rcu_str_deref(device->name), dev_bytenr,
-dev_state->name, dev_bytenr,
+rcu_string_dereference(device->name),
+dev_bytenr, dev_state->name, dev_bytenr,
superblock_mirror_num);
list_add(&superblock_tmp->all_blocks_node,
&state->all_blocks_list);
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
index 6f662b3..f697899 100644
--- a/fs/btrfs/dev-replace.c
+++ b/fs/btrfs/dev-replace.c
@@ -25,6 +25,7 @@
#include
#include
#include
+#include
#include
#include "ctree.h"
#include "extent_map.h"
@@ -34,7 +35,6 @@
#include "volumes.h"
#include "async-thread.h"
#include "check-integrity.h"
-#include "rcu-string.h"
#include "dev-replace.h"
#include "sysfs.h"
@@ -384,9 +384,9 @@ int btrfs_dev_replace_start(struct btrfs_root *root,
printk_in_rcu(KERN_INFO
"BTRFS: dev_replace from %s (devid %llu) to %s started\n",
src_device->missing ? "" :
- rcu_str_deref(src_device->name),
+ rcu_string_dereference(src_device->name),
src_device->devid,
- rcu_str_deref(tgt_device->name));
+ rcu_string_dereference(tgt_device->name));
/*
* from now on, the writes to the srcdev are all duplicated to
@@ -531,9 +531,10 @@ static int btrfs_dev_replace_finishing(struct
btrfs_fs_info *fs_info,
printk_in_rcu(KERN_ERR
"BTRFS: btrfs_scrub_dev(%s, %llu, %s) failed
%d\n",
src_device->missing ? "" :
- rcu_str_deref(src_device->name),
+ rcu_string_dereference(src_device->name),
src_device->devid,
- rcu_str_deref(tgt_device->name), scrub_ret);
+ rcu_string_dereference(tgt_device->name),
+ scrub_ret);
btrfs_dev_replace_unlock(dev_replace);
mutex_unlock(&root->fs_info->chunk_mutex);
mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
@@ -548,9 +549,9 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info
*fs_info,
printk_in_rcu(KERN_INFO
"BTRFS: dev_replace from %s (devid %llu) to %s
finished\n",
src_device->missing ? "" :
- rcu_str_deref(src_device->name),
+ rcu_string_dereference(src_device->name),
src_device->devid,
- rcu_str_deref(tgt_device->name));
+ rcu_string_dereference(tgt_device->name));
tgt_device->is_tgtdev_for_dev_replace = 0;
tgt_device->devid = src_device->devid;