]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/btrfs/ctree.c
Merge tag 'for-linus-5.6-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux.git] / fs / btrfs / ctree.c
index 5b6e86aaf2e1a42f468c0dbb94e8231d12973d1e..f2ec1a9bae287169e4ee6bb0494d14f4dc674cf8 100644 (file)
@@ -326,12 +326,10 @@ u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info,
                           struct seq_list *elem)
 {
        write_lock(&fs_info->tree_mod_log_lock);
-       spin_lock(&fs_info->tree_mod_seq_lock);
        if (!elem->seq) {
                elem->seq = btrfs_inc_tree_mod_seq(fs_info);
                list_add_tail(&elem->list, &fs_info->tree_mod_seq_list);
        }
-       spin_unlock(&fs_info->tree_mod_seq_lock);
        write_unlock(&fs_info->tree_mod_log_lock);
 
        return elem->seq;
@@ -351,7 +349,7 @@ void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info,
        if (!seq_putting)
                return;
 
-       spin_lock(&fs_info->tree_mod_seq_lock);
+       write_lock(&fs_info->tree_mod_log_lock);
        list_del(&elem->list);
        elem->seq = 0;
 
@@ -362,24 +360,22 @@ void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info,
                                 * blocker with lower sequence number exists, we
                                 * cannot remove anything from the log
                                 */
-                               spin_unlock(&fs_info->tree_mod_seq_lock);
+                               write_unlock(&fs_info->tree_mod_log_lock);
                                return;
                        }
                        min_seq = cur_elem->seq;
                }
        }
-       spin_unlock(&fs_info->tree_mod_seq_lock);
 
        /*
         * anything that's lower than the lowest existing (read: blocked)
         * sequence number can be removed from the tree.
         */
-       write_lock(&fs_info->tree_mod_log_lock);
        tm_root = &fs_info->tree_mod_log;
        for (node = rb_first(tm_root); node; node = next) {
                next = rb_next(node);
                tm = rb_entry(node, struct tree_mod_elem, node);
-               if (tm->seq > min_seq)
+               if (tm->seq >= min_seq)
                        continue;
                rb_erase(node, tm_root);
                kfree(tm);