From f98bde88e7bd44cf19922d84699eeff4d5d52e4f Mon Sep 17 00:00:00 2001 From: Boaz Harrosh Date: Tue, 9 Feb 2010 11:43:21 +0200 Subject: [PATCH] --- yaml --- r: 185839 b: refs/heads/master c: 96391e2bae0f8882b6f44809202a68be66e91dce h: refs/heads/master i: 185837: e7110b6ac881cb98641d534313a28532c61638e5 185835: 3ac4188f6ecb9c58693ed75339912f4f522b7ee5 185831: abf5e8474ee88c30ed6ef335c105855ec381d6ac 185823: 88540cd0b8a33a44aa5b278803a99f787851f62a v: v3 --- [refs] | 2 +- trunk/fs/exofs/inode.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index e0ca2dcfa15d..c88cf4108b1d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 86093aaff5be5b214613eb60553e236bdb389c84 +refs/heads/master: 96391e2bae0f8882b6f44809202a68be66e91dce diff --git a/trunk/fs/exofs/inode.c b/trunk/fs/exofs/inode.c index 6ca0b0117f04..5514f3c2c2f4 100644 --- a/trunk/fs/exofs/inode.c +++ b/trunk/fs/exofs/inode.c @@ -903,8 +903,18 @@ static int exofs_get_inode(struct super_block *sb, struct exofs_i_info *oi, ios->in_attr_len = ARRAY_SIZE(attrs); ret = exofs_sbi_read(ios); - if (ret) + if (unlikely(ret)) { + EXOFS_ERR("object(0x%llx) corrupted, return empty file=>%d\n", + _LLU(ios->obj.id), ret); + memset(inode, 0, sizeof(*inode)); + inode->i_mode = 0040000 | (0777 & ~022); + /* If object is lost on target we might as well enable it's + * delete. + */ + if ((ret == -ENOENT) || (ret == -EINVAL)) + ret = 0; goto out; + } ret = extract_attr_from_ios(ios, &attrs[0]); if (ret) {