summaryrefslogtreecommitdiff
path: root/fs/bcachefs/dirent.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/dirent.c')
-rw-r--r--fs/bcachefs/dirent.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/bcachefs/dirent.c b/fs/bcachefs/dirent.c
index 3ec0b4c5242c..edaa599fc3cc 100644
--- a/fs/bcachefs/dirent.c
+++ b/fs/bcachefs/dirent.c
@@ -12,10 +12,12 @@
unsigned bch2_dirent_name_bytes(struct bkey_s_c_dirent d)
{
- unsigned len = bkey_val_bytes(d.k) -
- offsetof(struct bch_dirent, d_name);
+ unsigned len = bkey_val_bytes(d.k) - sizeof(struct bch_dirent);
- return strnlen(d.v->d_name, len);
+ while (len && !d.v->d_name[len - 1])
+ --len;
+
+ return len;
}
static u64 bch2_dirent_hash(const struct bch_hash_info *info,
@@ -151,8 +153,7 @@ static struct bkey_i_dirent *dirent_create_key(struct btree_trans *trans,
memcpy(dirent->v.d_name, name->name, name->len);
memset(dirent->v.d_name + name->len, 0,
bkey_val_bytes(&dirent->k) -
- offsetof(struct bch_dirent, d_name) -
- name->len);
+ (sizeof(struct bch_dirent) + name->len));
EBUG_ON(bch2_dirent_name_bytes(dirent_i_to_s_c(dirent)) != name->len);