X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-ldiskfs%2Fosd_iam_lfix.c;h=db100f231f6bdd59bfddee0b92091af767d8d9ee;hb=cd764a5462697261a9a6b1e6c6858c75d969bae1;hp=efea0b32b9b865c2d5f014a3c857a454464d4d35;hpb=7cbd1b0c7409b4bfb44dc6869afc4ff9c90a7dce;p=fs%2Flustre-release.git diff --git a/lustre/osd-ldiskfs/osd_iam_lfix.c b/lustre/osd-ldiskfs/osd_iam_lfix.c index efea0b3..db100f2 100644 --- a/lustre/osd-ldiskfs/osd_iam_lfix.c +++ b/lustre/osd-ldiskfs/osd_iam_lfix.c @@ -27,7 +27,7 @@ * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012 Whamcloud, Inc. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -175,7 +175,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 +186,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 +206,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 +223,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) { @@ -241,31 +240,31 @@ static char *hex(char ch, char *area) static void l_print(struct iam_leaf *leaf, struct iam_lentry *entry) { - int i; - char *area; - char h[3]; + int i; + char *area; + char h[3]; - area = (char *)entry; - printk(CFS_KERN_EMERG "["); - for (i = iam_lfix_key_size(leaf); i > 0; --i, ++area) - printk("%s", hex(*area, h)); - printk("]-("); - for (i = iam_leaf_descr(leaf)->id_rec_size; i > 0; --i, ++area) - printk("%s", hex(*area, h)); - printk(")\n"); + area = (char *)entry; + printk(KERN_EMERG "["); + for (i = iam_lfix_key_size(leaf); i > 0; --i, ++area) + printk("%s", hex(*area, h)); + printk("]-("); + for (i = iam_leaf_descr(leaf)->id_rec_size; i > 0; --i, ++area) + printk("%s", hex(*area, h)); + printk(")\n"); } static void lfix_print(struct iam_leaf *leaf) { - struct iam_lentry *entry; - int count; - int i; + struct iam_lentry *entry; + int count; + int i; - entry = leaf->il_entries; - count = lentry_count_get(leaf); - printk(CFS_KERN_EMERG "lfix: %p %p %d\n", leaf, leaf->il_at, count); - for (i = 0; i < count; ++i, entry = iam_lfix_shift(leaf, entry, 1)) - l_print(leaf, entry); + entry = leaf->il_entries; + count = lentry_count_get(leaf); + printk(KERN_EMERG "lfix: %p %p %d\n", leaf, leaf->il_at, count); + for (i = 0; i < count; ++i, entry = iam_lfix_shift(leaf, entry, 1)) + l_print(leaf, entry); } static int iam_lfix_lookup(struct iam_leaf *l, const struct iam_key *k) @@ -331,8 +330,7 @@ static int iam_lfix_lookup(struct iam_leaf *l, const struct iam_key *k) static int iam_lfix_ilookup(struct iam_leaf *l, const struct iam_ikey *ik) { - assert(0); - return IAM_LOOKUP_OK; + return iam_lfix_lookup(l, (const struct iam_key *)ik); } static void iam_lfix_key_set(struct iam_leaf *l, const struct iam_key *k) @@ -484,7 +482,7 @@ static void iam_lfix_split(struct iam_leaf *l, struct buffer_head **bh, pivot = (const struct iam_ikey *)iam_leaf_key_at(start); memmove(iam_entries(new_leaf), start, finis - start); - hdr->ill_count = count - split; + hdr->ill_count = cpu_to_le16(count - split); lentry_count_set(l, split); if ((void *)l->il_at >= start) { /* @@ -799,26 +797,25 @@ static void lfix_root(void *buf, LASSERT((keysize + ptrsize) >= (sizeof(struct dx_countlimit) + sizeof(__u32))); - entry = limit + 1; + entry = (void *)(limit + 1); /* Put "idle_blocks" just after the limit. There was padding after * the limit, the "idle_blocks" re-uses part of the padding, so no * compatibility issues with old layout. */ *(__u32 *)entry = 0; - entry = root + 1; - /* - * Skip over @limit. - */ - entry += keysize + ptrsize; - - /* - * Entry format is followed by . In the minimal tree - * consisting of a root and single node, is a minimal possible - * key. - * - * XXX: this key is hard-coded to be a sequence of 0's. - */ + /* + * Skip over @limit. + */ + entry = (void *)(root + 1) + keysize + ptrsize; + + /* + * Entry format is followed by . In the minimal tree + * consisting of a root and single node, is a minimal possible + * key. + * + * XXX: this key is hard-coded to be a sequence of 0's. + */ memset(entry, 0, keysize); entry += keysize; @@ -858,22 +855,23 @@ 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); + 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) { 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); + 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); } @@ -881,4 +879,3 @@ int iam_lfix_create(struct inode *obj, brelse(root_node); return result; } -EXPORT_SYMBOL(iam_lfix_create);