diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 58558797de505c6b3c37eb8ff3513a04c6f8c221..761cf09e8f70249ddddc1e6471e42aff399ee264 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -24,6 +24,14 @@ tbd Sun Microsystems, Inc. 'tunefs.lustre --param="mdt.quota_type=ug1" $MDTDEV'. For more information, please refer to bugzilla 13904. +Severity : minor +Frequency : very rare +Bugzilla : 13380 +Description: MDT cannot be unmounted, reporting "Mount still busy" +Details : Mountpoint references were being leaked during open reply + reconstruction after an MDS restart. Drop mountpoint reference + in reconstruct_open() and free dentry reference also. + Severity : normal Bugzilla : 15443 Description: wait until IO finished before start new when do lock cancel. diff --git a/lustre/mds/mds_open.c b/lustre/mds/mds_open.c index 3750a0cd752ab968869091049972a270eaa3ee1c..b8c771aeb99805276214540f1049535e73614d74 100644 --- a/lustre/mds/mds_open.c +++ b/lustre/mds/mds_open.c @@ -619,11 +619,15 @@ static void reconstruct_open(struct mds_update_record *rec, int offset, CERROR("Re-opened file \n"); mfd = mds_dentry_open(dchild, mds->mds_vfsmnt, rec->ur_flags & ~MDS_OPEN_TRUNC, req); - if (!mfd) { - CERROR("mds: out of memory\n"); - GOTO(out_dput, req->rq_status = -ENOMEM); + mntput(mds->mds_vfsmnt); + if (IS_ERR(mfd)) { + req->rq_status = PTR_ERR(mfd); + mfd = NULL; + CERROR("%s: opening inode "LPU64" failed: rc %d\n", + req->rq_export->exp_obd->obd_name, + (__u64)dchild->d_inode->i_ino, req->rq_status); + GOTO(out_dput, req->rq_status); } - put_child = 0; } else { body->handle.cookie = mfd->mfd_handle.h_cookie; CDEBUG(D_INODE, "resend mfd %p, cookie "LPX64"\n", mfd,