From e2d9b897acb9c54f8a3f799b251335452824e5c1 Mon Sep 17 00:00:00 2001 From: Jian Yu Date: Tue, 23 Nov 2010 13:24:11 +0800 Subject: [PATCH] b=23289 no need to always start transaction for attr_set(atime) on close To reduce unnecessary transaction overhead on file closing. o=Liang Zhen i=mikhail.pershin i=di.wang --- lustre/mdd/mdd_object.c | 15 ++++++++++----- lustre/mdt/mdt_open.c | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index 604b713..95420dc 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -1431,6 +1431,16 @@ static int mdd_attr_set(const struct lu_env *env, struct md_object *obj, #endif ENTRY; + *la_copy = ma->ma_attr; + rc = mdd_fix_attr(env, mdd_obj, la_copy, ma); + if (rc != 0) + RETURN(rc); + + /* setattr on "close" only change atime, or do nothing */ + if (ma->ma_valid == MA_INODE && + ma->ma_attr.la_valid == LA_ATIME && la_copy->la_valid == 0) + RETURN(0); + mdd_setattr_txn_param_build(env, obj, (struct md_attr *)ma, MDD_TXN_ATTR_SET_OP); handle = mdd_trans_start(env, mdd); @@ -1456,11 +1466,6 @@ static int mdd_attr_set(const struct lu_env *env, struct md_object *obj, CDEBUG(D_INODE, "setting mtime "LPU64", ctime "LPU64"\n", ma->ma_attr.la_mtime, ma->ma_attr.la_ctime); - *la_copy = ma->ma_attr; - rc = mdd_fix_attr(env, mdd_obj, la_copy, ma); - if (rc) - GOTO(cleanup, rc); - #ifdef HAVE_QUOTA_SUPPORT if (mds->mds_quota && la_copy->la_valid & (LA_UID | LA_GID)) { struct obd_export *exp = md_quota(env)->mq_exp; diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index e0d4072..d581b82 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -1471,6 +1471,7 @@ int mdt_mfd_close(struct mdt_thread_info *info, struct mdt_file_data *mfd) if ((mode & MDS_FMODE_EXEC || mode & FMODE_READ || mode & FMODE_WRITE) && (ma->ma_valid & MA_INODE) && (ma->ma_attr.la_valid & LA_ATIME)) { /* Set the atime only. */ + ma->ma_valid = MA_INODE; ma->ma_attr.la_valid = LA_ATIME; rc = mo_attr_set(info->mti_env, next, ma); } -- 1.8.3.1