From 907b31c4d1d36a90a54a46dcc6beed9b7f4825b4 Mon Sep 17 00:00:00 2001 From: wang di Date: Mon, 18 Nov 2013 00:51:12 -0800 Subject: [PATCH] LU-3528 osd: check LOCAL sequence file in special directory Check Local sequence file in special directory, otherwise special file like fldb might be missing during upgrade. Signed-off-by: wang di Change-Id: I483151510b943ae9b9d9ba0b13f5ce67c4bfa5bb Reviewed-on: http://review.whamcloud.com/8354 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Reviewed-by: Fan Yong Reviewed-by: Oleg Drokin --- lustre/osd-ldiskfs/osd_oi.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lustre/osd-ldiskfs/osd_oi.c b/lustre/osd-ldiskfs/osd_oi.c index d4684b9..6e690be 100644 --- a/lustre/osd-ldiskfs/osd_oi.c +++ b/lustre/osd-ldiskfs/osd_oi.c @@ -553,14 +553,23 @@ int osd_oi_lookup(struct osd_thread_info *info, struct osd_device *osd, if (fid_is_on_ost(info, osd, fid, flags) || fid_is_llog(fid)) return osd_obj_map_lookup(info, osd, fid, id); - if (fid_is_fs_root(fid)) { - osd_id_gen(id, osd_sb(osd)->s_root->d_inode->i_ino, - osd_sb(osd)->s_root->d_inode->i_generation); - return 0; - } - if (unlikely(fid_is_acct(fid))) - return osd_acct_obj_lookup(info, osd, fid, id); + if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE)) { + int rc; + if (fid_is_fs_root(fid)) { + osd_id_gen(id, osd_sb(osd)->s_root->d_inode->i_ino, + osd_sb(osd)->s_root->d_inode->i_generation); + return 0; + } + if (unlikely(fid_is_acct(fid))) + return osd_acct_obj_lookup(info, osd, fid, id); + + /* For other special FIDs, try OI first, then do spec lookup */ + rc = __osd_oi_lookup(info, osd, fid, id); + if (rc == -ENOENT) + return osd_obj_spec_lookup(info, osd, fid, id); + return rc; + } if (!osd->od_igif_inoi && fid_is_igif(fid)) { osd_id_gen(id, lu_igif_ino(fid), lu_igif_gen(fid)); -- 1.8.3.1