X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flov%2Flov_merge.c;h=ad759c36dfbf2ac6739c7d590d97300ad41927fb;hb=07c6f609d37878ce0d308a129a0f3ae967d6197b;hp=20abe46ed77fd118d975a1e0442b4798ed0ea554;hpb=fbf5870b9848929d352460f1f005b79c0b5ccc5a;p=fs%2Flustre-release.git diff --git a/lustre/lov/lov_merge.c b/lustre/lov/lov_merge.c index 20abe46..ad759c3 100644 --- a/lustre/lov/lov_merge.c +++ b/lustre/lov/lov_merge.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -61,9 +61,9 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, __u64 size = 0; __u64 kms = 0; __u64 blocks = 0; - __u64 current_mtime = lvb->lvb_mtime; - __u64 current_atime = lvb->lvb_atime; - __u64 current_ctime = lvb->lvb_ctime; + obd_time current_mtime = lvb->lvb_mtime; + obd_time current_atime = lvb->lvb_atime; + obd_time current_ctime = lvb->lvb_ctime; int i; int rc = 0; @@ -94,17 +94,12 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, size = lov_size; /* merge blocks, mtime, atime */ blocks += loi->loi_lvb.lvb_blocks; + if (loi->loi_lvb.lvb_mtime > current_mtime) + current_mtime = loi->loi_lvb.lvb_mtime; if (loi->loi_lvb.lvb_atime > current_atime) current_atime = loi->loi_lvb.lvb_atime; - - /* mtime is always updated with ctime, but can be set in past. - As write and utime(2) may happen within 1 second, and utime's - mtime has a priority over write's one, leave mtime from mds - for the same ctimes. */ - if (loi->loi_lvb.lvb_ctime > current_ctime) { + if (loi->loi_lvb.lvb_ctime > current_ctime) current_ctime = loi->loi_lvb.lvb_ctime; - current_mtime = loi->loi_lvb.lvb_mtime; - } } *kms_place = kms; @@ -121,7 +116,7 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, * current atime, mtime, ctime to avoid regressing a more uptodate time on * the local client. * - * If @kms_only is set then we do not consider the recently seen size (rss) + * If \a kms_only is set then we do not consider the recently seen size (rss) * when updating the known minimum size (kms). Even when merging RSS, we will * take the KMS value if it's larger. This prevents getattr from stomping on * dirty cached pages which extend the file size. */ @@ -135,7 +130,7 @@ int lov_merge_lvb(struct obd_export *exp, rc = lov_merge_lvb_kms(lsm, lvb, &kms); if (kms_only) lvb->lvb_size = kms; - CDEBUG(D_INODE, "merged: %llu %llu %llu %llu %llu\n", + CDEBUG(D_INODE, "merged: "LPU64" "LPU64" "LPU64" "LPU64" "LPU64"\n", lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); RETURN(rc); @@ -201,8 +196,6 @@ void lov_merge_attrs(struct obdo *tgt, struct obdo *src, obd_flag valid, tgt->o_blksize += src->o_blksize; if (valid & OBD_MD_FLCTIME && tgt->o_ctime < src->o_ctime) tgt->o_ctime = src->o_ctime; - /* Only mtime from OSTs are merged here, as they cannot be set - in past (only MDS's mtime can) do not look at ctime. */ if (valid & OBD_MD_FLMTIME && tgt->o_mtime < src->o_mtime) tgt->o_mtime = src->o_mtime; } else { @@ -210,6 +203,6 @@ void lov_merge_attrs(struct obdo *tgt, struct obdo *src, obd_flag valid, tgt->o_id = lsm->lsm_object_id; if (valid & OBD_MD_FLSIZE) tgt->o_size = lov_stripe_size(lsm,src->o_size,stripeno); - *set = 1; } + *set += 1; }