diff --git a/src/common/bitstring.c b/src/common/bitstring.c
index c7fc9598d78db22329de7dc9b9487fd164269249..1bc56d5ae1e55b28f66844bc36070ae2633e2b0c 100644
--- a/src/common/bitstring.c
+++ b/src/common/bitstring.c
@@ -60,6 +60,7 @@ strong_alias(bit_fmt,		slurm_bit_fmt);
 strong_alias(bit_fls,		slurm_bit_fls);
 strong_alias(bit_fill_gaps,	slurm_bit_fill_gaps);
 strong_alias(bit_super_set,	slurm_bit_super_set);
+strong_alias(bit_equal,		slurm_bit_equal);
 strong_alias(bit_copy,		slurm_bit_copy);
 strong_alias(bit_pick_cnt,	slurm_bit_pick_cnt);
 strong_alias(bitfmt2int,	slurm_bitfmt2int);
@@ -362,6 +363,30 @@ bit_super_set(bitstr_t *b1, bitstr_t *b2)  {
 	return 1;
 }
 
+/*
+ * return 1 if b1 and b2 are identical, 0 otherwise
+ */
+extern int
+bit_equal(bitstr_t *b1, bitstr_t *b2)
+{
+	bitoff_t bit;
+
+	_assert_bitstr_valid(b1);
+	_assert_bitstr_valid(b2);
+
+	if (_bitstr_bits(b1) != _bitstr_bits(b2))
+		return 0;
+
+	for (bit = 0; bit < _bitstr_bits(b1); bit += sizeof(bitstr_t)*8) {
+		if (b1[_bit_word(bit)] != b2[_bit_word(bit)])
+			return 0;
+	}
+
+	return 1;
+}
+
+
+
 /*
  * b1 &= b2
  *   b1 (IN/OUT)	first string
diff --git a/src/common/bitstring.h b/src/common/bitstring.h
index 118706c38924212eff84c2d15c5949599782f1b7..80e1358e45b537054a99a3fe83dfbf55aa4d8cec 100644
--- a/src/common/bitstring.h
+++ b/src/common/bitstring.h
@@ -149,6 +149,7 @@ char	*bit_fmt(char *str, int len, bitstr_t *b);
 bitoff_t bit_fls(bitstr_t *b);
 void	bit_fill_gaps(bitstr_t *b);
 int	bit_super_set(bitstr_t *b1, bitstr_t *b2);
+int     bit_equal(bitstr_t *b1, bitstr_t *b2);
 bitstr_t *bit_copy(bitstr_t *b);
 bitstr_t *bit_pick_cnt(bitstr_t *b, bitoff_t nbits);
 int 	*bitfmt2int (char *bit_str_ptr);