From dbf4afc88e175ee83e18beb42599fabe2d1c643c Mon Sep 17 00:00:00 2001 From: wangdi Date: Sat, 21 Aug 2004 12:06:46 +0000 Subject: [PATCH] update.snap on smfs --- lustre/smfs/dir.c | 3 ++- lustre/smfs/smfs_cow.c | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lustre/smfs/dir.c b/lustre/smfs/dir.c index 0bb2586..78946b7 100644 --- a/lustre/smfs/dir.c +++ b/lustre/smfs/dir.c @@ -622,10 +622,11 @@ static int smfs_readdir(struct file *filp, void *dirent, filldir_t filldir) SMFS_HOOK(dentry->d_inode, filp, dirent, filldir, HOOK_READDIR, NULL, POST_HOOK, rc, exit); + + duplicate_file(filp, sfi->c_file); exit: if (rc > 0) rc = 0; - duplicate_file(filp, sfi->c_file); RETURN(rc); } diff --git a/lustre/smfs/smfs_cow.c b/lustre/smfs/smfs_cow.c index f02e7a7..d33d406 100644 --- a/lustre/smfs/smfs_cow.c +++ b/lustre/smfs/smfs_cow.c @@ -197,7 +197,8 @@ static int smfs_init_snap_inode_info(struct inode *inode, struct inode *dir, int RETURN(-EIO); } /*init dot_snap inode info*/ - inode->i_size = (loff_t)smfs_dotsnap_dir_size(inode); +// inode->i_size = (loff_t)smfs_dotsnap_dir_size(inode); + inode->i_size = snap_info->sni_table->sntbl_count; inode->i_nlink = snap_info->sni_table->sntbl_count + 2; inode->i_uid = 0; inode->i_gid = 0; @@ -617,7 +618,7 @@ static inline int get_index_of_item(struct snap_table *table, char *name) } } - for (i = 0; i < table->sntbl_max_count; i++) { + for (i = 1; i <= table->sntbl_max_count; i++) { int found = 0; for (j = 0; j < (count + 1); j++) { if (table->sntbl_items[j].sn_index == i) { @@ -1127,13 +1128,15 @@ static int smfs_dotsnap_lookup(struct inode *dir, struct dentry *dentry, break; } } - if (index != -1) { + if (index == -1) { CERROR("No such %s in this .snap dir \n", dentry->d_name.name); RETURN(-ENOENT); } cino = sops->fs_get_indirect_ino(S2CSB(dir->i_sb), dir->i_ino, index); + if (cino == 0) + cino = dir->i_ino; inode = smfs_get_inode(dir->i_sb, cino, dir, index); if (!inode || is_bad_inode(inode)) { CERROR("Can not find cino %lu inode\n", cino); @@ -1291,12 +1294,12 @@ static int smfs_cow_readdir_pre(struct inode *dir, void *de, void *data1, for (i = filp->f_pos - 2; i < table->sntbl_count; i++, filp->f_pos++) { - int slot = table->sntbl_count-i; + int slot = table->sntbl_count - i - 1; if (filldir(dirent, table->sntbl_items[slot].sn_name, strlen(table->sntbl_items[slot].sn_name), filp->f_pos, dir->i_ino, 0)) - break; + break; } RETURN(1); -- 1.8.3.1