X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-ldiskfs%2Fosd_iam_lfix.c;h=e0642bd57a2c84fb32be95b73c21e4cf12b9c052;hb=7ec8e4751fdf22894eef67972b094cd9f28ec3a0;hp=7d0e93ed2736cffc1f6b4647c4c5fac8264e70f3;hpb=8c47378b057e72d6125f4baffe8721e0734d0d3f;p=fs%2Flustre-release.git diff --git a/lustre/osd-ldiskfs/osd_iam_lfix.c b/lustre/osd-ldiskfs/osd_iam_lfix.c index 7d0e93e..e0642bd 100644 --- a/lustre/osd-ldiskfs/osd_iam_lfix.c +++ b/lustre/osd-ldiskfs/osd_iam_lfix.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/ @@ -175,7 +171,7 @@ static int iam_lfix_init(struct iam_leaf *l) ill = iam_get_head(l); count = le16_to_cpu(ill->ill_count); - if (ill->ill_magic == le16_to_cpu(IAM_LEAF_HEADER_MAGIC) && + if (le16_to_cpu(ill->ill_magic) == IAM_LEAF_HEADER_MAGIC && 0 <= count && count <= leaf_count_limit(l)) { l->il_at = l->il_entries = iam_get_lentries(l); result = 0; @@ -186,7 +182,7 @@ static int iam_lfix_init(struct iam_leaf *l) CERROR("Wrong magic in node %llu (#%lu): %#x != %#x or " "wrong count: %d (%d)\n", (unsigned long long)l->il_bh->b_blocknr, obj->i_ino, - ill->ill_magic, le16_to_cpu(IAM_LEAF_HEADER_MAGIC), + le16_to_cpu(ill->ill_magic), IAM_LEAF_HEADER_MAGIC, count, leaf_count_limit(l)); result = -EIO; } @@ -206,7 +202,7 @@ static struct iam_lentry *iam_lfix_get_end(const struct iam_leaf *l) return ile; } -struct iam_rec *iam_lfix_rec(const struct iam_leaf *l) +static struct iam_rec *iam_lfix_rec(const struct iam_leaf *l) { void *e = l->il_at; assert_corr(iam_leaf_at_rec(l)); @@ -223,7 +219,6 @@ static void iam_lfix_next(struct iam_leaf *l) * Bug chasing. */ int lfix_dump = 0; -EXPORT_SYMBOL(lfix_dump); static char hdigit(char ch) { @@ -490,13 +485,12 @@ static void iam_lfix_split(struct iam_leaf *l, struct buffer_head **bh, * insertion point moves into new leaf. */ int shift; - int result; shift = iam_lfix_diff(l, l->il_at, start); *bh = l->il_bh; l->il_bh = new_leaf; l->il_curidx = new_blknr; - result = iam_lfix_init(l); + iam_lfix_init(l); /* * init cannot fail, as node was just initialized. */ @@ -760,11 +754,11 @@ struct lfix_leaf { } ll_entry[LFIX_LEAF_RECNO]; }; -#define STORE_UNALIGNED(val, dst) \ -({ \ - typeof(val) __val = (val); \ - CLASSERT(sizeof(val) == sizeof(*(dst))); \ - memcpy(dst, &__val, sizeof(*(dst))); \ +#define STORE_UNALIGNED(val, dst) \ +({ \ + typeof(val) __val = (val); \ + CLASSERT(sizeof(val) == sizeof(*(dst))); \ + memcpy(dst, &__val, sizeof(*(dst))); \ }) static void lfix_root(void *buf, @@ -856,27 +850,36 @@ int iam_lfix_create(struct inode *obj, struct super_block *sb; u32 blknr; - int result; + int result = 0; unsigned long bsize; assert_corr(obj->i_size == 0); sb = obj->i_sb; bsize = sb->s_blocksize; - root_node = ldiskfs_append(handle, obj, &blknr, &result); - leaf_node = ldiskfs_append(handle, obj, &blknr, &result); - if (root_node != NULL && leaf_node != NULL) { - lfix_root(root_node->b_data, bsize, keysize, ptrsize, recsize); - lfix_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)); + + lfix_root(root_node->b_data, bsize, keysize, ptrsize, recsize); + lfix_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_lfix_create);