X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fobdfilter%2Ffilter_lvb.c;h=3ca1fad73296461d4b1f32c40ac837c463aa4161;hb=7a7e17d4db28fac1ca4bc333d60cbeb8dbc530d6;hp=23f672b87c88fb1e734ab271949e6fda7bb7497e;hpb=aa9dc61dce4b6f2f937a96562accb4be3606a094;p=fs%2Flustre-release.git diff --git a/lustre/obdfilter/filter_lvb.c b/lustre/obdfilter/filter_lvb.c index 23f672b..3ca1fad 100644 --- a/lustre/obdfilter/filter_lvb.c +++ b/lustre/obdfilter/filter_lvb.c @@ -70,18 +70,19 @@ static int filter_lvbo_init(struct ldlm_resource *res) GOTO(out, rc = PTR_ERR(dentry)); if (dentry->d_inode == NULL) - GOTO(out, rc = -ENOENT); + GOTO(out_dentry, rc = -ENOENT); lvb->lvb_size = dentry->d_inode->i_size; lvb->lvb_mtime = LTIME_S(dentry->d_inode->i_mtime); lvb->lvb_blocks = dentry->d_inode->i_blocks; - f_dput(dentry); CDEBUG(D_DLMTRACE, "res: "LPU64" initial lvb size: "LPU64", " "mtime: "LPU64", blocks: "LPU64"\n", res->lr_name.name[0], lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_blocks); + out_dentry: + f_dput(dentry); out: /* Don't free lvb data on lookup error */ up(&res->lr_lvb_sem); @@ -157,6 +158,9 @@ static int filter_lvbo_update(struct ldlm_resource *res, struct lustre_msg *m, if (IS_ERR(dentry)) GOTO(out, rc = PTR_ERR(dentry)); + if (dentry->d_inode == NULL) + GOTO(out_dentry, rc = -ENOENT); + if (dentry->d_inode->i_size > lvb->lvb_size || !increase) { CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb size from disk: " LPU64" -> %llu\n", res->lr_name.name[0], @@ -175,15 +179,14 @@ static int filter_lvbo_update(struct ldlm_resource *res, struct lustre_msg *m, lvb->lvb_blocks, dentry->d_inode->i_blocks); lvb->lvb_blocks = dentry->d_inode->i_blocks; +out_dentry: f_dput(dentry); - out: +out: up(&res->lr_lvb_sem); return rc; } - - struct ldlm_valblock_ops filter_lvbo = { lvbo_init: filter_lvbo_init, lvbo_update: filter_lvbo_update