From: adilger Date: Wed, 10 Aug 2005 08:35:42 +0000 (+0000) Subject: Land b_release_1_4_4 onto b1_4 (20050810_0211) X-Git-Tag: v1_7_140~1^12~3^2~55^5~36 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=9262a08636b808cabf28de062e5c4361bf698d93;p=fs%2Flustre-release.git Land b_release_1_4_4 onto b1_4 (20050810_0211) Description: Heavy concurrent write and delete load may cause data corruption. Details : It was possible under high-load situations to have an extent metadata block in the block device cache from a just-unlinked file overwrite a newly-allocated data block. We now unmap any metadata buffers that alias just-allocated data blocks. b=6998 Description: lconf+mke2fs fail when formatting filesystem with > 77 stripes Details : lconf specifies an inode size of 4096 bytes when the default stripe_count is larger than 77. This conflicts with the default inode density of 1 per 4096 bytes. Allocate smaller inodes in this case to avoid pinning too much memory for large EAs. b=7241 --- diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 276fe48..299b731 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -26,7 +26,7 @@ Details : If a client has max_dirty_mb smaller than max_rpcs_in_flight, to complete instead of consuming its dirty limit. With change we get improved performance when max_dirty_mb is small. -tbd Cluster File Systems, Inc. +2005-08-08 Cluster File Systems, Inc. * version 1.4.4 * bug fixes @@ -99,6 +99,24 @@ Details : Bad interaction between the ea-in-inode patch and the "no-read" code in the 2.6 kernel caused the inode and/or EA data not to be read from disk, causing single-file corruption. +Severity : critical +Bugzilla : 6998 +Frequency : rare, only 2.6 filesystems using extents +Description: Heavy concurrent write and delete load may cause data corruption. +Details : It was possible under high-load situations to have an extent + metadata block in the block device cache from a just-unlinked + file overwrite a newly-allocated data block. We now unmap any + metadata buffers that alias just-allocated data blocks. + +Severity : minor +Bugzilla : 7241 +Frequency : filesystems with default stripe_count larger than 77 +Description: lconf+mke2fs fail when formatting filesystem with > 77 stripes +Details : lconf specifies an inode size of 4096 bytes when the default + stripe_count is larger than 77. This conflicts with the default + inode density of 1 per 4096 bytes. Allocate smaller inodes in + this case to avoid pinning too much memory for large EAs. + ------------------------------------------------------------------------------ 2005-07-07 Cluster File Systems, Inc. diff --git a/lustre/autoconf/lustre-version.ac b/lustre/autoconf/lustre-version.ac index c994e20..9328b6c 100644 --- a/lustre/autoconf/lustre-version.ac +++ b/lustre/autoconf/lustre-version.ac @@ -1 +1 @@ -m4_define([LUSTRE_VERSION],[1.4.3.6]) +m4_define([LUSTRE_VERSION],[1.4.4.1]) diff --git a/lustre/lov/lov_request.c b/lustre/lov/lov_request.c index 4d08366..6bc4bd5 100644 --- a/lustre/lov/lov_request.c +++ b/lustre/lov/lov_request.c @@ -617,7 +617,7 @@ int lov_update_create_set(struct lov_request_set *set, loi = &lsm->lsm_oinfo[req->rq_stripe]; if (rc && lov->tgts[req->rq_idx].active) { - CERROR("error creating objid "LPX64" sub-object" + CERROR("error creating fid "LPX64" sub-object" " on OST idx %d/%d: rc = %d\n", set->set_oa->o_id, req->rq_idx, lsm->lsm_stripe_count, rc); diff --git a/lustre/lvfs/fsfilt_ext3.c b/lustre/lvfs/fsfilt_ext3.c index 4748216..a149191 100644 --- a/lustre/lvfs/fsfilt_ext3.c +++ b/lustre/lvfs/fsfilt_ext3.c @@ -853,6 +853,8 @@ out: unlock_24kernel(); map: if (err >= 0) { + struct block_device *bdev = inode->i_sb->s_bdev; + /* map blocks */ if (bp->num == 0) { CERROR("hmm. why do we find this extent?\n"); @@ -869,12 +871,18 @@ map: CERROR("nothing to do?! i = %d, e_num = %u\n", i, cex->ec_len); for (; i < cex->ec_len && bp->num; i++) { - if (cex->ec_type == EXT3_EXT_CACHE_EXTENT) + *(bp->blocks) = cex->ec_start + i; + if (cex->ec_type == EXT3_EXT_CACHE_EXTENT) { *(bp->created) = 0; - else + } else { *(bp->created) = 1; + /* unmap any possible underlying metadata from + * the block device mapping. bug 6998. + * This only compiles on 2.6, but there are + * no users of mballoc on 2.4. */ + unmap_underlying_metadata(bdev, *(bp->blocks)); + } bp->created++; - *(bp->blocks) = cex->ec_start + i; bp->blocks++; bp->num--; bp->start++; diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c index fadf1bd..3781811 100644 --- a/lustre/obdfilter/filter.c +++ b/lustre/obdfilter/filter.c @@ -1253,7 +1253,7 @@ static int filter_iobuf_pool_init(struct filter_obd *filter, int count) { void **pool; int i; - int result; + int result = 0; ENTRY; diff --git a/lustre/utils/lconf b/lustre/utils/lconf index dd07650..61b73b3 100755 --- a/lustre/utils/lconf +++ b/lustre/utils/lconf @@ -1724,7 +1724,7 @@ class MDSDEV(Module): else: stripe_count = 1 if stripe_count > 77: - self.inode_size = 4096 + self.inode_size = 512 elif stripe_count > 34: self.inode_size = 2048 elif stripe_count > 13: @@ -2933,7 +2933,7 @@ def doClumanager(lustreDB, hosts): if not node_db: panic("No node entry for " + node_uuid + " was found.") - new_services += add_clumanager_node(node_db, nodes, services) + new_services = new_services + append(add_clumanager_node(node_db, nodes, services)) nodenames = [] for node in nodes.keys(): @@ -2956,7 +2956,7 @@ def doClumanager(lustreDB, hosts): i = 0 for node in nodenames: print " " % (i, node) - i += 1 + i = i + 1 print " \n " @@ -2967,7 +2967,7 @@ def doClumanager(lustreDB, hosts): for service in servicekeys: svcdb = lustreDB.lookup(service) print " " % (i, svcdb.getName()) - i += 1 + i = i + 1 j = 0 active_uuid = get_active_target(svcdb) @@ -2980,7 +2980,7 @@ def doClumanager(lustreDB, hosts): svc_nodedb = lustreDB.lookup(svc_node_uuid) print " " % (j, svc_nodedb.getName()) - j += 1 + j = j + 1 print " " @@ -2998,7 +2998,7 @@ def doClumanager(lustreDB, hosts): print " " \ % ( svcdb.getName(), i, svcdb.getName(), config.service_scripts, svcdb.getName()) print " \n " - i += 1 + i = i + 1 print " \n"