]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/dirent.c
Update bcachefs sources to 1a739db0b256 bcachefs; guard against overflow in btree...
[bcachefs-tools-debian] / libbcachefs / dirent.c
index 580c1c95361e433684498f44759901b65cb51faf..51fe04f45690af5011a87a7777e03140ca762d09 100644 (file)
@@ -65,7 +65,7 @@ static bool dirent_cmp_key(struct bkey_s_c _l, const void *_r)
        const struct qstr l_name = bch2_dirent_get_name(l);
        const struct qstr *r_name = _r;
 
-       return l_name.len - r_name->len ?: memcmp(l_name.name, r_name->name, l_name.len);
+       return !qstr_eq(l_name, *r_name);
 }
 
 static bool dirent_cmp_bkey(struct bkey_s_c _l, struct bkey_s_c _r)
@@ -75,7 +75,7 @@ static bool dirent_cmp_bkey(struct bkey_s_c _l, struct bkey_s_c _r)
        const struct qstr l_name = bch2_dirent_get_name(l);
        const struct qstr r_name = bch2_dirent_get_name(r);
 
-       return l_name.len - r_name.len ?: memcmp(l_name.name, r_name.name, l_name.len);
+       return !qstr_eq(l_name, r_name);
 }
 
 static bool dirent_is_visible(subvol_inum inum, struct bkey_s_c k)
@@ -471,17 +471,11 @@ u64 bch2_dirent_lookup(struct bch_fs *c, subvol_inum dir,
                       const struct qstr *name, subvol_inum *inum)
 {
        struct btree_trans *trans = bch2_trans_get(c);
-       struct btree_iter iter;
-       int ret;
-retry:
-       bch2_trans_begin(trans);
+       struct btree_iter iter = { NULL };
 
-       ret = __bch2_dirent_lookup_trans(trans, &iter, dir, hash_info,
-                                         name, inum, 0);
-       if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
-               goto retry;
-       if (!ret)
-               bch2_trans_iter_exit(trans, &iter);
+       int ret = lockrestart_do(trans,
+               __bch2_dirent_lookup_trans(trans, &iter, dir, hash_info, name, inum, 0));
+       bch2_trans_iter_exit(trans, &iter);
        bch2_trans_put(trans);
        return ret;
 }