On Thu, Apr 30, 2009 at 06:58:34AM +0800, Tao Ma wrote:
> +/*
> + * Lock the refcount tree pointed by ref_blkno and return the tree.
> + * In most case, we lock the tree and read the refcount block.
> + * So read it here if the caller really need it.
> + */
> +int ocfs2_lock_refcount_tree(struct ocfs2_super *osb, u64 ref_blkno, int rw,
> +                          struct ocfs2_refcount_tree **ret_tree,
> +                          struct buffer_head **ref_bh)
> +{
> +     int ret;
> +     struct ocfs2_refcount_tree *tree = NULL;
> +
> +     ret = ocfs2_get_refcount_tree(osb, ref_blkno, &tree);
> +     if (ret) {
> +             mlog_errno(ret);
> +             goto out;
> +     }
> +
> +     ret = ocfs2_refcount_lock(&tree->rf_lockres, rw);
> +     if (ret) {
> +             mlog_errno(ret);
> +             goto out;
> +     }
> +
> +     if (rw)
> +             down_write(&tree->rf_sem);
> +     else
> +             down_read(&tree->rf_sem);
> +
> +     if (ref_bh) {
> +             ret = ocfs2_read_refcount_block(&tree->rf_ci,
> +                                             ref_blkno, ref_bh);
> +             if (ret) {
> +                     mlog_errno(ret);
> +                     ocfs2_unlock_refcount_tree(osb, tree, rw);
> +                     goto out;
> +             }
> +     }
> +
> +     *ret_tree = tree;
> +out:
> +     return ret;
> +}
> +
> +void ocfs2_unlock_refcount_tree(struct ocfs2_super *osb,
> +                             struct ocfs2_refcount_tree *tree, int rw)
> +{
> +     ocfs2_refcount_unlock(&tree->rf_lockres, rw);
> +
> +     if (rw)
> +             up_write(&tree->rf_sem);
> +     else
> +             up_read(&tree->rf_sem);
> +}

        You lock "cluster, mutex", but you also unlock "cluster, mutex".
I would think you'd want to unlock "mutex, cluster".


-- 

"Here's a nickle -- get yourself a better X server."
        - Keith Packard

Joel Becker
Principal Software Developer
Oracle
E-mail: [email protected]
Phone: (650) 506-8127

_______________________________________________
Ocfs2-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to