X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fliblustre%2Fsuper.c;h=558885a0667e6bd9bd0bde9693a87598d4ab5e8f;hb=5f31f03c3b409b984f88e9b1b55a72b14a41aa09;hp=66089224a542d65c1c2b8143f5cc1c30a733d4f4;hpb=d79fc607ddc94e1b5bfcee6c0ebe4ad6045f2823;p=fs%2Flustre-release.git diff --git a/lustre/liblustre/super.c b/lustre/liblustre/super.c index 6608922..558885a 100644 --- a/lustre/liblustre/super.c +++ b/lustre/liblustre/super.c @@ -142,7 +142,7 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid %x, cur time %lu/%lu, new %lu/%lu\n", - src->o_valid, + src->o_valid, LTIME_S(lli->lli_st_mtime), LTIME_S(lli->lli_st_ctime), (long)src->o_mtime, (long)src->o_ctime); @@ -182,7 +182,7 @@ void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid %x, new time %lu/%lu\n", - valid, LTIME_S(lli->lli_st_mtime), + valid, LTIME_S(lli->lli_st_mtime), LTIME_S(lli->lli_st_ctime)); if (valid & OBD_MD_FLATIME) { @@ -273,7 +273,7 @@ int llu_inode_getattr(struct inode *inode, struct lov_stripe_md *lsm) if (rc) RETURN(rc); - refresh_valid = OBD_MD_FLBLOCKS | OBD_MD_FLBLKSZ | OBD_MD_FLMTIME | + refresh_valid = OBD_MD_FLBLOCKS | OBD_MD_FLBLKSZ | OBD_MD_FLMTIME | OBD_MD_FLCTIME | OBD_MD_FLSIZE; /* We set this flag in commit write as we extend the file size. When @@ -289,7 +289,7 @@ int llu_inode_getattr(struct inode *inode, struct lov_stripe_md *lsm) if (test_bit(LLI_F_PREFER_EXTENDED_SIZE, &lli->lli_flags)) { if (oa.o_size < lli->lli_st_size) refresh_valid &= ~OBD_MD_FLSIZE; - else + else clear_bit(LLI_F_PREFER_EXTENDED_SIZE, &lli->lli_flags); } @@ -403,7 +403,8 @@ static int llu_inode_revalidate(struct inode *inode) CERROR("failure %d inode %lu\n", rc, lli->lli_st_ino); RETURN(-abs(rc)); } - rc = mdc_req2lustre_md(req, 0, sbi->ll_osc_exp, &md); + rc = mdc_req2lustre_md(sbi->ll_mdc_exp, req, 0, + sbi->ll_osc_exp, &md); /* XXX Too paranoid? */ if (((md.body->valid ^ valid) & OBD_MD_FLEASIZE) && @@ -652,7 +653,8 @@ int llu_setattr_raw(struct inode *inode, struct iattr *attr) RETURN(rc); } - rc = mdc_req2lustre_md(request, 0, sbi->ll_osc_exp, &md); + rc = mdc_req2lustre_md(sbi->ll_mdc_exp, request, 0, + sbi->ll_osc_exp, &md); if (rc) { ptlrpc_req_finished(request); RETURN(rc); @@ -838,7 +840,7 @@ static int llu_readlink_internal(struct inode *inode, CERROR ("OBD_MD_LINKNAME not set on reply\n"); GOTO (failed, rc = -EPROTO); } - + LASSERT (symlen != 0); if (body->eadatasize != symlen) { CERROR ("inode %lu: symlink length %d not expected %d\n", @@ -1244,7 +1246,7 @@ static int llu_put_grouplock(struct inode *inode, unsigned long arg) memset(&fd->fd_cwlockh, 0, sizeof(fd->fd_cwlockh)); RETURN(0); -} +} static int llu_iop_ioctl(struct inode *ino, unsigned long int request, va_list ap) @@ -1290,8 +1292,11 @@ struct inode *llu_iget(struct filesys *fs, struct lustre_md *md) if ((md->body->valid & (OBD_MD_FLGENER | OBD_MD_FLID | OBD_MD_FLTYPE)) != - (OBD_MD_FLGENER | OBD_MD_FLID | OBD_MD_FLTYPE)) - CERROR("invalide fields!\n"); + (OBD_MD_FLGENER | OBD_MD_FLID | OBD_MD_FLTYPE)) { + /* FIXME this is workaround for for open(O_CREAT), + * see lookup_it_finish(). */ + return ERR_PTR(-EPERM); + } /* try to find existing inode */ fid.id = md->body->ino; @@ -1303,9 +1308,9 @@ struct inode *llu_iget(struct filesys *fs, struct lustre_md *md) struct llu_inode_info *lli = llu_i2info(inode); if (lli->lli_stale_flag || - lli->lli_st_generation != md->body->generation) + lli->lli_st_generation != md->body->generation) { I_RELE(inode); - else { + } else { llu_update_inode(inode, md->body, md->lsm); return inode; } @@ -1314,7 +1319,7 @@ struct inode *llu_iget(struct filesys *fs, struct lustre_md *md) inode = llu_new_inode(fs, &fid); if (inode) llu_update_inode(inode, md->body, md->lsm); - + return inode; } @@ -1367,9 +1372,9 @@ llu_fsswop_mount(const char *source, /* generate a string unique to this super, let's try the address of the super itself.*/ - len = (sizeof(sbi) * 2) + 1; + len = (sizeof(sbi) * 2) + 1; OBD_ALLOC(sbi->ll_instance, len); - if (sbi->ll_instance == NULL) + if (sbi->ll_instance == NULL) GOTO(out_free, err = -ENOMEM); sprintf(sbi->ll_instance, "%p", sbi); @@ -1380,6 +1385,7 @@ llu_fsswop_mount(const char *source, CERROR("Unable to process log: %s\n", g_zconf_profile); GOTO(out_free, err); + } lprof = class_get_profile(g_zconf_profile); @@ -1389,13 +1395,13 @@ llu_fsswop_mount(const char *source, } if (osc) OBD_FREE(osc, strlen(osc) + 1); - OBD_ALLOC(osc, strlen(lprof->lp_osc) + + OBD_ALLOC(osc, strlen(lprof->lp_osc) + strlen(sbi->ll_instance) + 2); sprintf(osc, "%s-%s", lprof->lp_osc, sbi->ll_instance); if (mdc) OBD_FREE(mdc, strlen(mdc) + 1); - OBD_ALLOC(mdc, strlen(lprof->lp_mdc) + + OBD_ALLOC(mdc, strlen(lprof->lp_mdc) + strlen(sbi->ll_instance) + 2); sprintf(mdc, "%s-%s", lprof->lp_mdc, sbi->ll_instance); } else { @@ -1432,8 +1438,11 @@ llu_fsswop_mount(const char *source, GOTO(out_free, err = -EINVAL); } +#warning "FIXME ASAP!" +#if 0 if (mdc_init_ea_size(obd, osc)) GOTO(out_free, err = -EINVAL); +#endif /* setup mdc */ err = obd_connect(&mdc_conn, obd, &sbi->ll_sb_uuid); @@ -1481,7 +1490,8 @@ llu_fsswop_mount(const char *source, GOTO(out_osc, err); } - err = mdc_req2lustre_md(request, 0, sbi->ll_osc_exp, &md); + err = mdc_req2lustre_md(sbi->ll_mdc_exp, request, 0, + sbi->ll_osc_exp, &md); if (err) { CERROR("failed to understand root inode md: rc = %d\n",err); GOTO(out_request, err); @@ -1490,7 +1500,7 @@ llu_fsswop_mount(const char *source, LASSERT(sbi->ll_rootino != 0); root = llu_iget(fs, &md); - if (root == NULL) { + if (!root || IS_ERR(root)) { CERROR("fail to generate root inode\n"); GOTO(out_request, err = -EBADF); } @@ -1560,5 +1570,3 @@ static struct inode_ops llu_inode_ops = { #endif inop_gone: llu_iop_gone, }; - -#warning "time_after() defined in liblustre.h need to be rewrite in userspace"