summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-11-12 17:29:49 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-11-12 17:29:49 -0500
commit26a960a3712d38edd287d23377d9e7be8ee92340 (patch)
treee04070ac017110d23af09f0a4545da84c3a6ecb1
parentd7dbddc4504c1bf509f8eb5818b5042342dc9ed1 (diff)
bcachefs: Revert to broken direntsdirent-hack
-rw-r--r--fs/bcachefs/dirent.c11
-rw-r--r--fs/bcachefs/dirent.h3
2 files changed, 7 insertions, 7 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);
diff --git a/fs/bcachefs/dirent.h b/fs/bcachefs/dirent.h
index a57a5382780b..1ba3c0a3c98c 100644
--- a/fs/bcachefs/dirent.h
+++ b/fs/bcachefs/dirent.h
@@ -24,8 +24,7 @@ unsigned bch2_dirent_name_bytes(struct bkey_s_c_dirent);
static inline unsigned dirent_val_u64s(unsigned len)
{
- return DIV_ROUND_UP(offsetof(struct bch_dirent, d_name) + len,
- sizeof(u64));
+ return DIV_ROUND_UP(sizeof(struct bch_dirent) + len, sizeof(u64));
}
int __bch2_dirent_create(struct btree_trans *, u64,