From 3f09c2b10e0aef9b20df18ca3cf2e4638159d3db Mon Sep 17 00:00:00 2001 From: Bobi Jam Date: Tue, 2 Dec 2014 14:55:45 +0800 Subject: [PATCH] LU-1154 clio: pass fid for OST setattr Store inode's fid in cl_setattr_ost() and OSC packs this info on the wire (via lustre_set_wire_obdo) so that OST can use. NOTE: currently lu_fid::f_ver and obdo::o_parent_ver are not used on OFD device, and we use obdo::o_stripe_idx as filter_fid::ff_parent::f_ver and save it to the device. Signed-off-by: Bobi Jam Change-Id: Ib396d19da0a7049f76b80e4d73bcad82b73f06df Reviewed-on: http://review.whamcloud.com/12902 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Jinshan Xiong Reviewed-by: Andreas Dilger Reviewed-by: John L. Hammond --- lustre/include/cl_object.h | 22 ++++++++++++---------- lustre/llite/lcommon_cl.c | 13 +++++++------ lustre/lov/lov_io.c | 13 ++++++++----- lustre/osc/osc_io.c | 4 +++- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/lustre/include/cl_object.h b/lustre/include/cl_object.h index eb0fb23..85b267d 100644 --- a/lustre/include/cl_object.h +++ b/lustre/include/cl_object.h @@ -1849,17 +1849,19 @@ struct cl_io { struct cl_rd_io { struct cl_io_rw_common rd; } ci_rd; - struct cl_wr_io { - struct cl_io_rw_common wr; - int wr_append; + struct cl_wr_io { + struct cl_io_rw_common wr; + int wr_append; int wr_sync; - } ci_wr; - struct cl_io_rw_common ci_rw; - struct cl_setattr_io { - struct ost_lvb sa_attr; - unsigned int sa_valid; - struct obd_capa *sa_capa; - } ci_setattr; + } ci_wr; + struct cl_io_rw_common ci_rw; + struct cl_setattr_io { + struct ost_lvb sa_attr; + unsigned int sa_valid; + int sa_stripe_index; + struct lu_fid *sa_parent_fid; + struct obd_capa *sa_capa; + } ci_setattr; struct cl_fault_io { /** page index within file. */ pgoff_t ft_index; diff --git a/lustre/llite/lcommon_cl.c b/lustre/llite/lcommon_cl.c index 94254e3..01c359a 100644 --- a/lustre/llite/lcommon_cl.c +++ b/lustre/llite/lcommon_cl.c @@ -507,12 +507,13 @@ int cl_setattr_ost(struct inode *inode, const struct iattr *attr, io = ccc_env_thread_io(env); io->ci_obj = ll_i2info(inode)->lli_clob; - io->u.ci_setattr.sa_attr.lvb_atime = LTIME_S(attr->ia_atime); - io->u.ci_setattr.sa_attr.lvb_mtime = LTIME_S(attr->ia_mtime); - io->u.ci_setattr.sa_attr.lvb_ctime = LTIME_S(attr->ia_ctime); - io->u.ci_setattr.sa_attr.lvb_size = attr->ia_size; - io->u.ci_setattr.sa_valid = attr->ia_valid; - io->u.ci_setattr.sa_capa = capa; + io->u.ci_setattr.sa_attr.lvb_atime = LTIME_S(attr->ia_atime); + io->u.ci_setattr.sa_attr.lvb_mtime = LTIME_S(attr->ia_mtime); + io->u.ci_setattr.sa_attr.lvb_ctime = LTIME_S(attr->ia_ctime); + io->u.ci_setattr.sa_attr.lvb_size = attr->ia_size; + io->u.ci_setattr.sa_valid = attr->ia_valid; + io->u.ci_setattr.sa_parent_fid = ll_inode2fid(inode); + io->u.ci_setattr.sa_capa = capa; again: if (cl_io_init(env, io, CIT_SETATTR, io->ci_obj) == 0) { diff --git a/lustre/lov/lov_io.c b/lustre/lov/lov_io.c index 839eca6..74b79ce 100644 --- a/lustre/lov/lov_io.c +++ b/lustre/lov/lov_io.c @@ -88,11 +88,14 @@ static void lov_io_sub_inherit(struct cl_io *io, struct lov_io *lio, struct lov_stripe_md *lsm = lio->lis_object->lo_lsm; struct cl_io *parent = lio->lis_cl.cis_io; - switch(io->ci_type) { - case CIT_SETATTR: { - io->u.ci_setattr.sa_attr = parent->u.ci_setattr.sa_attr; - io->u.ci_setattr.sa_valid = parent->u.ci_setattr.sa_valid; - io->u.ci_setattr.sa_capa = parent->u.ci_setattr.sa_capa; + switch (io->ci_type) { + case CIT_SETATTR: { + io->u.ci_setattr.sa_attr = parent->u.ci_setattr.sa_attr; + io->u.ci_setattr.sa_valid = parent->u.ci_setattr.sa_valid; + io->u.ci_setattr.sa_stripe_index = stripe; + io->u.ci_setattr.sa_parent_fid = + parent->u.ci_setattr.sa_parent_fid; + io->u.ci_setattr.sa_capa = parent->u.ci_setattr.sa_capa; if (cl_io_is_trunc(io)) { loff_t new_size = parent->u.ci_setattr.sa_attr.lvb_size; diff --git a/lustre/osc/osc_io.c b/lustre/osc/osc_io.c index d4eb1e3..24f86ab 100644 --- a/lustre/osc/osc_io.c +++ b/lustre/osc/osc_io.c @@ -487,10 +487,12 @@ static int osc_io_setattr_start(const struct lu_env *env, memset(oa, 0, sizeof(*oa)); if (result == 0) { oa->o_oi = loi->loi_oi; + obdo_set_parent_fid(oa, io->u.ci_setattr.sa_parent_fid); + oa->o_stripe_idx = io->u.ci_setattr.sa_stripe_index; oa->o_mtime = attr->cat_mtime; oa->o_atime = attr->cat_atime; oa->o_ctime = attr->cat_ctime; - oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP | OBD_MD_FLATIME | + oa->o_valid |= OBD_MD_FLID | OBD_MD_FLGROUP | OBD_MD_FLATIME | OBD_MD_FLCTIME | OBD_MD_FLMTIME; if (ia_valid & ATTR_SIZE) { oa->o_size = size; -- 1.8.3.1