From d87204c77c629362885d2ea3795664ae3282e384 Mon Sep 17 00:00:00 2001 From: shadow Date: Tue, 8 Sep 2009 08:02:31 +0000 Subject: [PATCH] resolve race with saving updates into lov_objid file. Branch b1_8 b=20464 i=adilger i=green --- lustre/mds/mds_lov.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lustre/mds/mds_lov.c b/lustre/mds/mds_lov.c index 1004d3d..7e640c8 100644 --- a/lustre/mds/mds_lov.c +++ b/lustre/mds/mds_lov.c @@ -436,6 +436,9 @@ int mds_lov_write_objids(struct obd_device *obd) LASSERT(data != NULL); + if (!cfs_bitmap_test_and_clear(mds->mds_lov_page_dirty, i)) + continue; + /* check for particaly filled last page */ if (i == mds->mds_lov_objid_lastpage) size = (mds->mds_lov_objid_lastidx + 1) * sizeof(obd_id); @@ -443,9 +446,10 @@ int mds_lov_write_objids(struct obd_device *obd) CDEBUG(D_INFO,"write %lld - %u\n", off, size); rc = fsfilt_write_record(obd, mds->mds_lov_objid_filp, data, size, &off, 0); - if (rc < 0) + if (rc < 0) { + cfs_bitmap_set(mds->mds_lov_page_dirty, i); break; - cfs_bitmap_clear(mds->mds_lov_page_dirty, i); + } } if (rc >= 0) rc = 0; -- 1.8.3.1