|
@@ -1791,52 +1791,6 @@ cleanup:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * When all the xattrs are deleted from index btree, the ocfs2_xattr_tree
|
|
|
- * will be erased and ocfs2_xattr_block will have its ocfs2_xattr_header
|
|
|
- * re-initialized.
|
|
|
- */
|
|
|
-static int ocfs2_restore_xattr_block(struct inode *inode,
|
|
|
- struct ocfs2_xattr_search *xs)
|
|
|
-{
|
|
|
- int ret;
|
|
|
- handle_t *handle;
|
|
|
- struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
|
|
|
- struct ocfs2_xattr_block *xb =
|
|
|
- (struct ocfs2_xattr_block *)xs->xattr_bh->b_data;
|
|
|
- struct ocfs2_extent_list *el = &xb->xb_attrs.xb_root.xt_list;
|
|
|
- u16 xb_flags = le16_to_cpu(xb->xb_flags);
|
|
|
-
|
|
|
- BUG_ON(!(xb_flags & OCFS2_XATTR_INDEXED) ||
|
|
|
- le16_to_cpu(el->l_next_free_rec) != 0);
|
|
|
-
|
|
|
- handle = ocfs2_start_trans(osb, OCFS2_XATTR_BLOCK_UPDATE_CREDITS);
|
|
|
- if (IS_ERR(handle)) {
|
|
|
- ret = PTR_ERR(handle);
|
|
|
- handle = NULL;
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
- ret = ocfs2_journal_access(handle, inode, xs->xattr_bh,
|
|
|
- OCFS2_JOURNAL_ACCESS_WRITE);
|
|
|
- if (ret < 0) {
|
|
|
- mlog_errno(ret);
|
|
|
- goto out_commit;
|
|
|
- }
|
|
|
-
|
|
|
- memset(&xb->xb_attrs, 0, inode->i_sb->s_blocksize -
|
|
|
- offsetof(struct ocfs2_xattr_block, xb_attrs));
|
|
|
-
|
|
|
- xb->xb_flags = cpu_to_le16(xb_flags & ~OCFS2_XATTR_INDEXED);
|
|
|
-
|
|
|
- ocfs2_journal_dirty(handle, xs->xattr_bh);
|
|
|
-
|
|
|
-out_commit:
|
|
|
- ocfs2_commit_trans(osb, handle);
|
|
|
-out:
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* ocfs2_xattr_block_set()
|
|
|
*
|
|
@@ -1947,8 +1901,6 @@ out:
|
|
|
}
|
|
|
|
|
|
ret = ocfs2_xattr_set_entry_index_block(inode, xi, xs);
|
|
|
- if (!ret && xblk->xb_attrs.xb_root.xt_list.l_next_free_rec == 0)
|
|
|
- ret = ocfs2_restore_xattr_block(inode, xs);
|
|
|
|
|
|
end:
|
|
|
|