Whamcloud - gitweb
LU-10391 lnet: find correct primary for peer
[fs/lustre-release.git] / lustre / osd-ldiskfs / osd_iam.c
index a2e82b0..5f690e0 100644 (file)
@@ -230,7 +230,6 @@ int iam_container_init(struct iam_container *c,
        memset(c, 0, sizeof *c);
        c->ic_descr = descr;
        c->ic_object = inode;
-       init_rwsem(&c->ic_sem);
        dynlock_init(&c->ic_tree_lock);
        mutex_init(&c->ic_idle_mutex);
        return 0;
@@ -616,26 +615,6 @@ static int iam_it_get_exact(struct iam_iterator *it, const struct iam_key *k)
        return result;
 }
 
-void iam_container_write_lock(struct iam_container *ic)
-{
-       down_write(&ic->ic_sem);
-}
-
-void iam_container_write_unlock(struct iam_container *ic)
-{
-       up_write(&ic->ic_sem);
-}
-
-void iam_container_read_lock(struct iam_container *ic)
-{
-       down_read(&ic->ic_sem);
-}
-
-void iam_container_read_unlock(struct iam_container *ic)
-{
-       up_read(&ic->ic_sem);
-}
-
 /*
  * Initialize iterator to IAM_IT_DETACHED state.
  *
@@ -779,12 +758,18 @@ void iam_insert_key(struct iam_path *path, struct iam_frame *frame,
        assert_corr(count < dx_get_limit(entries));
        assert_corr(frame->at < iam_entry_shift(path, entries, count));
        assert_inv(dx_node_check(path, frame));
+       /* Prevent memory corruption outside of buffer_head */
+       BUG_ON(count >= dx_get_limit(entries));
+       BUG_ON((char *)iam_entry_shift(path, entries, count + 1) >
+              (frame->bh->b_data + frame->bh->b_size));
 
        memmove(iam_entry_shift(path, new, 1), new,
                (char *)iam_entry_shift(path, entries, count) - (char *)new);
        dx_set_ikey(path, new, key);
        dx_set_block(path, new, ptr);
        dx_set_count(entries, count + 1);
+
+       BUG_ON(count > dx_get_limit(entries));
        assert_inv(dx_node_check(path, frame));
 }