From cb37dec676077e23a39aee1da53475cfe6cc8a82 Mon Sep 17 00:00:00 2001 From: adilger Date: Thu, 28 Apr 2005 00:22:59 +0000 Subject: [PATCH] Branch: b1_4 Free lsm if there was an error allocating lsr. --- lustre/mds/mds_log.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/lustre/mds/mds_log.c b/lustre/mds/mds_log.c index dc1a143..b73b7d2 100644 --- a/lustre/mds/mds_log.c +++ b/lustre/mds/mds_log.c @@ -43,10 +43,10 @@ static int mds_log_fill_unlink_rec(struct llog_rec_hdr *rec, void *data) { struct llog_fill_rec_data *lfd = (struct llog_fill_rec_data *)data; struct llog_unlink_rec *lur = (struct llog_unlink_rec *)rec; - + lur->lur_oid = lfd->lfd_id; lur->lur_ogen = lfd->lfd_ogen; - + RETURN(0); } @@ -55,10 +55,10 @@ static int mds_log_fill_setattr_rec(struct llog_rec_hdr *rec, void *data) { struct llog_fill_rec_data *lfd = (struct llog_fill_rec_data *)data; struct llog_setattr_rec *lsr = (struct llog_setattr_rec *)rec; - + lsr->lsr_oid = lfd->lfd_id; lsr->lsr_ogen = lfd->lfd_ogen; - + RETURN(0); } @@ -155,34 +155,33 @@ int mds_log_op_setattr(struct obd_device *obd, struct inode *inode, struct llog_setattr_rec *lsr; int rc; ENTRY; - + if (IS_ERR(mds->mds_osc_obd)) RETURN(PTR_ERR(mds->mds_osc_obd)); - - rc = obd_unpackmd(mds->mds_osc_exp, &lsm, - lmm, lmm_size); + + rc = obd_unpackmd(mds->mds_osc_exp, &lsm, lmm, lmm_size); if (rc < 0) RETURN(rc); OBD_ALLOC(lsr, sizeof(*lsr)); if (!lsr) - RETURN(-ENOMEM); - + GOTO(out, rc = -ENOMEM); + /* prepare setattr log record */ lsr->lsr_hdr.lrh_len = lsr->lsr_tail.lrt_len = sizeof(*lsr); lsr->lsr_hdr.lrh_type = MDS_SETATTR_REC; lsr->lsr_uid = inode->i_uid; lsr->lsr_gid = inode->i_gid; - + /* write setattr log */ ctxt = llog_get_context(obd, LLOG_MDS_OST_ORIG_CTXT); rc = llog_add(ctxt, &lsr->lsr_hdr, lsm, logcookies, cookies_size / sizeof(struct llog_cookie), mds_log_fill_setattr_rec); - obd_free_memmd(mds->mds_osc_exp, &lsm); OBD_FREE(lsr, sizeof(*lsr)); - + out: + obd_free_memmd(mds->mds_osc_exp, &lsm); RETURN(rc); } -- 1.8.3.1