X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fobdfilter%2Ffilter_lvb.c;h=a548983f251ac859da2a2ff6cdeb9b32e26ec586;hp=080db86f422baee035a27c3f59d1ad8e405dad87;hb=11c2c0ec77125041e9c8143a80e7e51aede653ea;hpb=e1491c1b4b6e21352f58b94eee6d125a63566d29 diff --git a/lustre/obdfilter/filter_lvb.c b/lustre/obdfilter/filter_lvb.c index 080db86..a548983 100644 --- a/lustre/obdfilter/filter_lvb.c +++ b/lustre/obdfilter/filter_lvb.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -28,6 +26,8 @@ /* * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, Whamcloud, Inc. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -42,9 +42,6 @@ #define DEBUG_SUBSYSTEM S_FILTER -#ifndef AUTOCONF_INCLUDED -#include -#endif #include #include @@ -66,7 +63,7 @@ static int filter_lvbo_free(struct ldlm_resource *res) { return 0; } -/* Called with res->lr_lvb_sem held */ +/* Called with res->lr_lvb_mutex held */ static int filter_lvbo_init(struct ldlm_resource *res) { struct ost_lvb *lvb = NULL; @@ -76,7 +73,7 @@ static int filter_lvbo_init(struct ldlm_resource *res) ENTRY; LASSERT(res); - LASSERT_SEM_LOCKED(&res->lr_lvb_sem); + LASSERT_MUTEX_LOCKED(&res->lr_lvb_mutex); if (res->lr_lvb_data) RETURN(0); @@ -188,6 +185,12 @@ static int filter_lvbo_update(struct ldlm_resource *res, lvb->lvb_ctime, new->lvb_ctime); lvb->lvb_ctime = new->lvb_ctime; } + if (new->lvb_blocks > lvb->lvb_blocks || !increase_only) { + CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb blocks: " + LPU64" -> "LPU64"\n", res->lr_name.name[0], + lvb->lvb_blocks, new->lvb_blocks); + lvb->lvb_blocks = new->lvb_blocks; + } } disk_update: @@ -248,7 +251,7 @@ static int filter_lvbo_update(struct ldlm_resource *res, lvb->lvb_ctime, LTIME_S(inode->i_ctime)); lvb->lvb_ctime = LTIME_S(inode->i_ctime); } - if (lvb->lvb_blocks != inode->i_blocks) { + if (inode->i_blocks > lvb->lvb_blocks || !increase_only) { CDEBUG(D_DLMTRACE,"res: "LPU64" updating lvb blocks from disk: " LPU64" -> %llu\n", res->lr_name.name[0], lvb->lvb_blocks, (unsigned long long)inode->i_blocks);