Joel Becker wrote:
> 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".
yeah, I should use the reverse order.

Thanks.

Regards,
Tao

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

Reply via email to