X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fosd-ldiskfs%2Fosd_iam_lvar.c;h=be7ed47e1a9fb424d792e0ed0dd260340a06b289;hb=72057a3af19ee02d9a686bd7e7d074917e381310;hp=8223711e07e4e835513f95972fae7203bb3148d2;hpb=6a9e714c03ab4d328f7ee24e2d01bd0146ef52c7;p=fs%2Flustre-release.git diff --git a/lustre/osd-ldiskfs/osd_iam_lvar.c b/lustre/osd-ldiskfs/osd_iam_lvar.c index 8223711..be7ed47 100644 --- a/lustre/osd-ldiskfs/osd_iam_lvar.c +++ b/lustre/osd-ldiskfs/osd_iam_lvar.c @@ -14,12 +14,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,7 +23,7 @@ * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -158,17 +154,6 @@ static void e_print(const struct lvar_leaf_entry *ent) printk(" %p %8.8x \"%*.*s\"\n", ent, e_hash(ent), e_keysize(ent), e_keysize(ent), e_char(ent)); } -#if 0 -static int e_check(const struct iam_leaf *leaf, - const struct lvar_leaf_entry *ent) -{ - const void *point = ent; - const void *start = leaf->il_bh->b_data; - return - start + sizeof(struct lvar_leaf_header) <= point && - point + e_size(leaf, ent) < start + blocksize(leaf); -} -#endif static inline struct lvar_leaf_entry *e_next(const struct iam_leaf *leaf, const struct lvar_leaf_entry *ent) @@ -200,14 +185,14 @@ static __u32 hash_build0(const char *name, int namelen) struct ldiskfs_dx_hash_info hinfo; hinfo.hash_version = LDISKFS_DX_HASH_TEA; - hinfo.seed = 0; + hinfo.seed = NULL; ldiskfsfs_dirhash(name, namelen, &hinfo); result = hinfo.hash; if (LVAR_HASH_SANDWICH) { __u32 result2; hinfo.hash_version = LDISKFS_DX_HASH_TEA; - hinfo.seed = 0; + hinfo.seed = NULL; ldiskfsfs_dirhash(name, namelen, &hinfo); result2 = hinfo.hash; result = (0xfc000000 & result2) | (0x03ffffff & result); @@ -407,12 +392,12 @@ static int lvar_init(struct iam_leaf *l) struct inode *obj; obj = iam_leaf_container(l)->ic_object; - CERROR("Wrong magic in node %llu (#%lu): %#x != %#x or " - "wrong used: %d", - (unsigned long long)l->il_bh->b_blocknr, obj->i_ino, + CERROR("Wrong magic in node %llu (#%lu): %#x != %#x or " + "wrong used: %d\n", + (unsigned long long)l->il_bh->b_blocknr, obj->i_ino, le16_to_cpu(head->vlh_magic), IAM_LVAR_LEAF_MAGIC, - used); - result = -EIO; + used); + result = -EIO; } return result; } @@ -422,7 +407,7 @@ static void lvar_fini(struct iam_leaf *l) l->il_entries = l->il_at = NULL; } -struct iam_rec *lvar_rec(const struct iam_leaf *l) +static struct iam_rec *lvar_rec(const struct iam_leaf *l) { assert_corr(n_at_rec(l)); return e_rec(n_cur(l)); @@ -1017,23 +1002,32 @@ int iam_lvar_create(struct inode *obj, sb = obj->i_sb; bsize = sb->s_blocksize; - root_node = osd_ldiskfs_append(handle, obj, &blknr, &result); - leaf_node = osd_ldiskfs_append(handle, obj, &blknr, &result); - if (root_node != NULL && leaf_node != NULL) { - lvar_root(root_node->b_data, bsize, keysize, ptrsize, recsize); - lvar_leaf(leaf_node->b_data, bsize, keysize, ptrsize, recsize); - ldiskfs_mark_inode_dirty(handle, obj); - result = ldiskfs_journal_dirty_metadata(handle, root_node); - if (result == 0) - result = ldiskfs_journal_dirty_metadata(handle, leaf_node); - if (result != 0) - ldiskfs_std_error(sb, result); - } - brelse(leaf_node); - brelse(root_node); - return result; + root_node = osd_ldiskfs_append(handle, obj, &blknr); + if (IS_ERR(root_node)) + GOTO(out, result = PTR_ERR(root_node)); + + leaf_node = osd_ldiskfs_append(handle, obj, &blknr); + if (IS_ERR(leaf_node)) + GOTO(out_root, result = PTR_ERR(leaf_node)); + + lvar_root(root_node->b_data, bsize, keysize, ptrsize, recsize); + lvar_leaf(leaf_node->b_data, bsize, keysize, ptrsize, recsize); + ldiskfs_mark_inode_dirty(handle, obj); + result = ldiskfs_handle_dirty_metadata(handle, NULL, root_node); + if (result == 0) + result = ldiskfs_handle_dirty_metadata(handle, NULL, leaf_node); + if (result != 0) + ldiskfs_std_error(sb, result); + + brelse(leaf_node); + + GOTO(out_root, result); + +out_root: + brelse(root_node); +out: + return result; } -EXPORT_SYMBOL(iam_lvar_create); static struct iam_operations lvar_ops = { .id_root_ptr = lvar_root_ptr,